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 }