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"] = "

Hello

" + pm.Content + "

" // 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 } }