从AWS SES发送电子邮件时出现凭据错误

时间:2018-06-13 04:34:36

标签: amazon-web-services go amazon-ses

我正在尝试通过Golang中的Amazon SES发送电子邮件。以前它正在使用以下代码开发服务器(没有SSL):

sess, err := session.NewSession(&aws.Config{
            Region:aws.String(AwsRegion)},
        )

    /* Create an SES client in the session */
    svc := ses.New(sess)

    /* Assemble the email */
    input := &ses.SendEmailInput{
        Destination: &ses.Destination{
            CcAddresses: []*string{
            },
            ToAddresses: []*string{
                aws.String(request.EmailTo),
            },
        },
        Message: &ses.Message{
            Body: &ses.Body{
                Html: &ses.Content{
                    Charset: aws.String(CharSet),
                    Data:    aws.String(body),
                },
            },
            Subject: &ses.Content{
                Charset: aws.String(CharSet),
                Data:    aws.String(subject),
            },
        },
        Source: aws.String("test<test@example.com>"),
    }

    /* Attempt to send the email */
    result, err := svc.SendEmail(input)

最近我开始使用生产服务器(使用SSL),同样的代码开始给我以下错误:

NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors

我尝试在代码中添加凭据,如下所示:

creds := credentials.NewCredentials(&ec2rolecreds.EC2RoleProvider{})

/* updated session block with credentials in aws config */
sess, err := session.NewSession(&aws.Config{
    Region: aws.String(AwsRegion),
    Credentials: creds})

但是这段代码无效(甚至没有编译)并且给了我以下错误:

/main.go:63:42: undefined: ec2rolecreds

但是我已经在代码中包含了凭证包。

我没有得到如何为此代码添加凭据,以便它也可以在生产服务器上运行。任何形式的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

第一个错误(NoCredentialProviders)与代码无关,但找不到任何凭据。根据{{​​3}},它会按以下顺序自动检查:

  1. 环境变量。
  2. 共享凭据文件。
  3. 如果您的应用程序在Amazon EC2实例上运行,则为Amazon EC2的IAM角色。

如果它在一个环境中工作而在另一个环境中工作,我想您是具有IAM角色的,它具有通过实例配置文件与EC2实例相关联的必要权限。

要显式设置凭据,请尝试以下操作:

staticCreds = credentials.NewStaticCredentials("<key-id>", "<secret>", "<session token>")
session, err = session.NewSession(&aws.Config{Credentials: staticCreds})