2024-11-20 19:42:07 +08:00
|
|
|
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"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 不支持变更发信人(必须配置好)
|
|
|
|
|
|
|
|
|
|
type Aws struct {
|
|
|
|
|
interfaces.DefaultEmail
|
2025-08-10 21:17:10 +08:00
|
|
|
// params *interfaces.EmailConfigDataAws
|
2024-11-20 19:42:07 +08:00
|
|
|
}
|
|
|
|
|
|
2025-08-10 21:17:10 +08:00
|
|
|
func NewAws() *Aws {
|
|
|
|
|
aws := &Aws{}
|
|
|
|
|
aws.Options = interfaces.DefaultOptions()
|
2025-08-30 18:14:09 +08:00
|
|
|
aws.EmailType = interfaces.EmailTypeAws
|
2025-08-10 21:17:10 +08:00
|
|
|
return aws
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (l *Aws) SetOption(ctx context.Context, opt ...interfaces.Option) (interfaces.EmailInterface, error) {
|
|
|
|
|
|
|
|
|
|
for _, o := range opt {
|
|
|
|
|
o(&l.Options)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
l.Options.Logger.Infof(ctx, "Aws:%+v", l.Options.Aws)
|
|
|
|
|
if l.Options.Aws == nil {
|
2024-11-20 19:42:07 +08:00
|
|
|
return nil, errors.New("not aws")
|
|
|
|
|
}
|
2025-08-10 21:17:10 +08:00
|
|
|
|
|
|
|
|
if l.Options.Aws.Region == "" {
|
|
|
|
|
l.Options.Aws.Region = "ap-northeast-1"
|
2024-11-20 19:42:07 +08:00
|
|
|
}
|
|
|
|
|
|
2025-08-10 21:17:10 +08:00
|
|
|
return l, nil
|
2024-11-20 19:42:07 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (l *Aws) Send(ctx context.Context, params interfaces.Message) error {
|
2025-08-10 21:17:10 +08:00
|
|
|
if l.Options.Aws == nil {
|
2024-11-20 19:42:07 +08:00
|
|
|
return errors.New("not init")
|
|
|
|
|
}
|
|
|
|
|
// 配置AWS认证信息
|
|
|
|
|
config := aws.Config{
|
2025-08-10 21:17:10 +08:00
|
|
|
Region: aws.String(l.Options.Aws.Region), // 设置你的AWS区域
|
|
|
|
|
Credentials: credentials.NewStaticCredentials(l.Options.Aws.AccessId, l.Options.Aws.AccessSecret, ""),
|
2024-11-20 19:42:07 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建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"),
|
|
|
|
|
},
|
|
|
|
|
},
|
2025-08-10 21:17:10 +08:00
|
|
|
Source: aws.String(l.Options.Aws.Sender),
|
2024-11-20 19:42:07 +08:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// svc.SendRawEmail()
|
|
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
}
|