87 lines
2.9 KiB
Go
87 lines
2.9 KiB
Go
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
|
||
}
|
||
}
|