【问题标题】:Go AWS SES Unable to find credentials转到 AWS SES 无法找到凭证
【发布时间】:2021-08-19 06:06:40
【问题描述】:

我正在尝试使用适用于 Go 的 aws sdk v2 发送邮件。 我正在低于错误。使用 s3 客户端时,一切正常。我检查了与凭据关联的权限,它具有管理员访问权限。无法理解可能是什么问题。

operation error SES: SendEmail, failed to sign request: failed to retrieve credentials: request canceled, context canceled

config.go

AWSConfig, err = awsConfig.LoadDefaultConfig(context.TODO())
    if err != nil {
        log.Println("Error configuring aws: ", err)
    }

mailer.go

type Mail struct {
    To []string
    From string
    Subject string
    Body string
}

func (m *Mail) Send(ctx context.Context) error {
    sesClient := ses.NewFromConfig(config.AWSConfig)
    result, err := sesClient.SendEmail(ctx, &ses.SendEmailInput{
        Destination:          &types.Destination{
            ToAddresses:  m.To,
        },
        Message:              &types.Message{
            Body:    &types.Body{
                Html: &types.Content{
                    Data:    &m.Body,
                    Charset: &CharSet,
                },
            },
            Subject: &types.Content{
                Data:    &m.Subject,
                Charset: &CharSet,
            },
        },
        Source:               &m.From,
        ReplyToAddresses:     ReplyTo,
        ReturnPath:           &BounceEmail,
    })
    if err != nil {
        log.Println(fmt.Errorf("[MailSenderUtil]: error sending mail: %w", err))
        return err
    }
    log.Println("[MailSenderUtilResult]: ", InJson(result))
    return nil
}

【问题讨论】:

    标签: go amazon-ses aws-sdk-go


    【解决方案1】:

    我认为您需要将您的 aws 凭证添加到 config.AWSConfig。这是我的配置

    sess, err := session.NewSession(&aws.Config{
        Credentials: credentials.NewStaticCredentials(constants.AWSAccessID, constants.AWSAccessKey , ""),
        Region:aws.String("eu-west-2")},
    )
    
    svc := ses.New(sess)
    
    input := &ses.SendEmailInput{
        Destination: &ses.Destination{
            ToAddresses: []*string{
                aws.String(Recipient),
            },
        },
        Message: &ses.Message{
            Body: &ses.Body{
                Html: &ses.Content{
                    Charset: aws.String(CharSet),
                    Data:    aws.String(HtmlBody),
                },
                Text: &ses.Content{
                    Charset: aws.String(CharSet),
                    Data:    aws.String(TextBody),
                },
            },
            Subject: &ses.Content{
                Charset: aws.String(CharSet),
                Data:    aws.String(Subject),
            },
        },
        Source: aws.String(Sender),
        // Uncomment to use a configuration set
        //ConfigurationSetName: aws.String(ConfigurationSet),
    }
    
    // Attempt to send the email.
    _, err = svc.SendEmail(input)
    if err != nil {
        if aerr, ok := err.(awserr.Error); ok {
            switch aerr.Code() {
            case ses.ErrCodeMessageRejected:
                logger.Logger.Error(ses.ErrCodeMessageRejected, aerr.OrigErr())
            case ses.ErrCodeMailFromDomainNotVerifiedException:
                logger.Logger.Error(ses.ErrCodeMailFromDomainNotVerifiedException, aerr.OrigErr())
            case ses.ErrCodeConfigurationSetDoesNotExistException:
                logger.Logger.Error(ses.ErrCodeConfigurationSetDoesNotExistException, aerr.OrigErr())
            default:
                logger.Logger.Error("amazon default error", aerr.OrigErr())
            }
        } else {
            logger.Logger.Error("amazon default error (else)", aerr.OrigErr())
        }
    
        return
    }
    

    【讨论】:

    • 在几乎所有情况下,这都是个坏建议。 AWS SDK 提供了多种机制来加载凭证,并且会在应用程序运行的环境已正确配置的情况下自动执行此操作。
    猜你喜欢
    • 2019-06-01
    • 2021-09-29
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    相关资源
    最近更新 更多