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 // params *interfaces.EmailConfigDataAws } func NewAws() *Aws { aws := &Aws{} aws.Options = interfaces.DefaultOptions() aws.EmailType = interfaces.EmailTypeAws 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 { return nil, errors.New("not aws") } if l.Options.Aws.Region == "" { l.Options.Aws.Region = "ap-northeast-1" } return l, nil } func (l *Aws) Send(ctx context.Context, params interfaces.Message) error { if l.Options.Aws == nil { return errors.New("not init") } // 配置AWS认证信息 config := aws.Config{ Region: aws.String(l.Options.Aws.Region), // 设置你的AWS区域 Credentials: credentials.NewStaticCredentials(l.Options.Aws.AccessId, l.Options.Aws.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.Options.Aws.Sender), }) // svc.SendRawEmail() return err }