87 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package api
import (
"encoding/json"
"fmt"
"gitea.party/public-messag-service/common/params"
"gitea.party/public-messag-service/common/public"
"gitea.party/public-messag-service/internal/models/mysql"
"gitea.party/public-messag-service/router/web"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
"github.com/gin-gonic/gin"
"log"
"strings"
"time"
)
func EmailXSend(c *gin.Context) {
result := web.NewResponse()
defer web.SendResponse(c, result)()
pm := params.EmailSend{}
err := c.ShouldBindJSON(&pm)
if err != nil {
result.SetErrCode(public.RespCodeErrorParam).AddError(err)
return
}
// 初始化客户端
credentialsProvider := credentials.NewStaticAKCredentialsProvider(pm.AccessKeyId, pm.AccessKeySecret)
client, err := sdk.NewClientWithOptions(
"cn-hangzhou", // 区域 ID例如 cn-hangzhou
sdk.NewConfig(), // 请求配置
credentialsProvider, //
)
if err != nil {
panic(err)
}
// 创建请求
request := requests.NewCommonRequest()
request.Method = "POST"
request.Scheme = "https"
request.Domain = "dm.aliyuncs.com" // 邮件推送服务域名
request.Version = "2015-11-23" // API 版本
request.ApiName = "SingleSendMail" // 接口名称
// 设置请求参数
emailStr := strings.Join(pm.Email, ",")
request.QueryParams["RegionId"] = "cn-hangzhou"
request.QueryParams["AccountName"] = "sender@your-domain.com" // 发件人地址(需验证)
request.QueryParams["AddressType"] = "1" // 0: 随机账号; 1: 发件人地址
request.QueryParams["ReplyToAddress"] = "false" // 是否允许回复
request.QueryParams["ToAddress"] = emailStr // 收件人地址
request.QueryParams["Subject"] = "Test Email from Aliyun" // 邮件主题
request.QueryParams["HtmlBody"] = "<h1>Hello</h1><p>" + pm.Content + "</p>" // HTML 邮件正文
// request.QueryParams["TextBody"] = "This is a test email." // 纯文本正文(可选,优先使用 HtmlBody
// 发送请求
res, err := client.ProcessCommonRequest(request)
if err != nil {
log.Fatalf("Failed to send request: %v", err)
}
messagesLogData := make([]map[string]interface{}, 0, len(pm.Email))
for _, v := range pm.Email {
messagesLogData = append(messagesLogData, map[string]interface{}{
"msg_type": 2,
"to_phone_email": v,
"msg_content": pm.Content,
"result_msg": json.Marshal(err),
"created_at": time.Now().Unix(),
})
}
var msgModel mysql.MessageSendLog
_, errMsg := msgModel.BatchCreate(messagesLogData)
// 处理响应
if errMsg == nil && res.IsSuccess() {
result.SetData(res.GetHttpContentString())
return
} else {
result.SetErrMsg(
public.RespCodeErrorUnknown,
fmt.Sprintf("发送失败: %s", res.GetHttpContentString())).AddError()
return
}
}