完善多个通道

This commit is contained in:
Yun
2024-11-20 19:42:07 +08:00
parent 868a5106e6
commit dc49e97912
33 changed files with 1857 additions and 187 deletions
+82
View File
@@ -0,0 +1,82 @@
package aws
import (
"context"
"errors"
"code.yun.ink/pkg/mailx/interfaces"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ses"
"github.com/yuninks/loggerx"
)
// 不支持变更发信人(必须配置好)
type Aws struct {
interfaces.DefaultEmail
params *interfaces.EmailConfigDataAws
logger loggerx.LoggerInterface
}
func (l *Aws) InitEmail(ctx context.Context, params interfaces.EmailConfigData, logger loggerx.LoggerInterface) (interfaces.Email, error) {
l.logger.Infof(ctx, "params:%+v", params)
if params.Aws == nil {
return nil, errors.New("not aws")
}
l.logger.Infof(ctx, "params:%+v", params.Aws)
if params.Aws.Region == "" {
params.Aws.Region = "ap-northeast-1"
}
return &Aws{
params: params.Aws,
}, nil
}
func (l *Aws) Send(ctx context.Context, params interfaces.Message) error {
if l.params == nil {
return errors.New("not init")
}
// 配置AWS认证信息
config := aws.Config{
Region: aws.String(l.params.Region), // 设置你的AWS区域
Credentials: credentials.NewStaticCredentials(l.params.AccessId, l.params.AccessSecret, ""),
}
// 创建AWS会话
sess := session.Must(session.NewSession(&config))
// 创建SES客户端
svc := ses.New(sess)
toAddress := []*string{}
for _, val := range params.To {
toAddress = append(toAddress, aws.String(val))
}
// 使用SES服务发送邮件
_, err := svc.SendEmail(&ses.SendEmailInput{
Destination: &ses.Destination{
ToAddresses: toAddress,
},
Message: &ses.Message{
Body: &ses.Body{
Html: &ses.Content{
Data: aws.String(params.Body),
Charset: aws.String("UTF-8"),
},
},
Subject: &ses.Content{
Data: aws.String(params.Subject),
Charset: aws.String("UTF-8"),
},
},
Source: aws.String(l.params.Sender),
})
// svc.SendRawEmail()
return err
}
+52
View File
@@ -0,0 +1,52 @@
package aws_test
import (
"context"
"testing"
"code.yun.ink/pkg/mailx/aws"
"code.yun.ink/pkg/mailx/interfaces"
"github.com/yuninks/loggerx"
)
// https://ap-northeast-1.console.aws.amazon.com/ses/home?region=ap-northeast-1#/identities
func TestSend(t *testing.T) {
// email:
// #区域
// AwsRegion: "ap-northeast-1"
// #秘钥ID
// AwsAccessKeyId: "AKIAU6GD3MNRHKR4RZG5"
// #秘钥
// AwsSecretAccessKey: "GSdGuFbZlcpVHMODlqeIKr07R/BdTBGeurq0s+4l"
// #发件人
// Source: "chenlihan@dreaminglife.cn"
ctx := context.Background()
logger := loggerx.NewLogger(ctx)
mail := aws.Aws{}
ini, err := mail.InitEmail(ctx, interfaces.EmailConfigData{
Aws: &interfaces.EmailConfigDataAws{
AccessId: "AKIAU6GD3MNRHKR4RZG5",
AccessSecret: "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",
Region: "ap-northeast-1",
Sender: "chenlihan@dreaminglife.cn",
},
}, logger)
if err != nil {
t.Fatal(err)
}
err = ini.Send(ctx, interfaces.Message{
Form: "chenlihan@dreaminglife.cn",
To: []string{"huangxinyun@dreaminglife.cn"},
Body: "Hello",
Subject: "主题",
})
if err != nil {
t.Fatal(err)
}
t.Log("send success")
}
+3
View File
@@ -0,0 +1,3 @@
[info]{"time":"2024-09-27 18:32:19.629859","file":"/aws.go:23","func":"InitEmail","gid":"33","content":["params:{Smtp:\u003cnil\u003e Aws:0xc000698080 Aliyun:\u003cnil\u003e Mailgun:\u003cnil\u003e}"]}
[info]{"time":"2024-09-27 18:32:30.207798","file":"/aws.go:23","func":"InitEmail","gid":"28","content":["params:{Smtp:\u003cnil\u003e Aws:0xc000565400 Aliyun:\u003cnil\u003e Mailgun:\u003cnil\u003e}"]}
+3
View File
@@ -0,0 +1,3 @@
[info]{"time":"2024-09-30 11:31:01.195981","file":"/aws.go:23","func":"InitEmail","gid":"44","content":["params:{Smtp:\u003cnil\u003e Aws:0xc00078c080 Aliyun:\u003cnil\u003e Mailgun:\u003cnil\u003e}"]}
[info]{"time":"2024-09-30 11:31:01.201642","file":"/aws.go:27","func":"InitEmail","gid":"44","content":["params:\u0026{AccessId:AKIAU6GD3MNRHKR4RZG5 AccessSecret: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 Region:ap-northeast-1 Sender:chenlihan@dreaminglife.cn}"]}