Symfony 2 Swiftmailer + Amazon SES:无法使用2个可能的身份验证器在用户名为“XXXXXXXXXXXXXXXX”的SMTP服务器上进行身份验证

时间:2014-07-07 15:33:48

标签: email symfony amazon-web-services swiftmailer amazon-ses

我知道之前已经问过这个问题,但是通过Symfony2 + Swiftmailer + Amazon SES,任何给定的响应都已经成为这种情况的解决方案。

我在Symfony2中设置了Swiftmailer的Amazon SES帐户详细信息,所有信息都是正确的,用户名和密码。然而,由于一些奇怪的原因我没有赶上Symfony2 Swiftmailer在发送电子邮件时将此错误丢给我。

Failed to authenticate on SMTP server with username "XXXXXXXXXXXXXXXX" using 2 possible authenticators

这是我在config.yml

中得到的
#app/config/config.yml

# Swiftmailer Configuration
swiftmailer:
    transport: "%mailer_transport%"
    host:      "%mailer_host%"
    port:      "%mailer_port%"
    encryption: "%encryption%"
    username:  "%mailer_user%"
    password:  "%mailer_password%"

和parameters.yml

#app/config/parameters.yml

parameters:
    database_driver: pdo_mysql
    database_host: 127.0.0.1
    database_port: null
    database_name: mydatabase
    database_user: dbuser
    database_password: dbpass
    mailer_transport: smtp
    mailer_host: email-smtp.us-east-1.amazonaws.com
    mailer_port: 587
    encryption: tls
    mailer_user: XXXXXXXXXXXXXXXX
    mailer_password: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    mailer_from: support@mycompany.com
    locale: en
    secret: ThisTokenIsNotSoSecretChangeIt
    debug_toolbar: true
    debug_redirects: false
    use_assetic_controller: true

放置Gmail smtp详细信息而非Amazon SES正常运行并正确发送电子邮件。但是使用Amazon SES配置却没有。我再说一遍,用户名是正确的,它可以与Amazon SES Mailer库一起使用,但不能与Symfony集成的Swiftmailer一起使用。

有些想法?

3 个答案:

答案 0 :(得分:5)

我知道这是一个老问题,但我只是想补充一些东西,因为我过去了3个小时试图解决这个确切的问题。

从Symfony V4.0开始,Swift Mailer的配置就像这样,通过环境变量:

MAILER_URL=smtp://email-smtp.us-east-1.amazonaws.com:587?encryption=tls&username=YOUR_SES_USERNAME&password=YOUR_SES_PASSWORD

here所示。

问题是这是一个URL,所以这意味着如果字符串有任何特殊字符,则需要对它们进行编码,在这种情况下,密码就有一个加号,例如。 :

AKD23$ADADADJJ$123123LKIOU8jUIJ8j+9IJHJW8JNN4nnn2

这改变了,直到我改为:

AKD23$ADADADJJ$123123LKIOU8jUIJ8j%2B9IJHJW8JNN4nnn2

这彻底解决了这个问题。

答案 1 :(得分:4)

我认为所有的配置参数都很好,就像Symfony2文档中的http://symfony.com/doc/current/cookbook/email/cloud.html

一样

如果使用属于AWS SDK的Amazon SES Mailer库,则检查您是否在Symfony2中使用Swiftmailer的SMTP解决方案的正确凭据。

使用AWS SDK时,您可以使用AWS访问密钥访问SES API,并能够使用该SDK中包含的Amazon SES Mailer发送电子邮件。

当您使用像Swiftmailer这样的其他库时,您将通过Amazon SES SMTP接口发送电子邮件,它需要SMTP凭据,而不是AWS访问密钥。

此SMTP凭据是从SES控制台中的SMTP设置生成的,这些是使用SMTP发送带有amazon SES的电子邮件时应使用的正确凭据。

查看此文档 http://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-credentials.html

答案 2 :(得分:0)

对于后代,您可以通过控制台创建SMTP凭据,如Obtaining Your Amazon SES SMTP Credentials文档中所述。

当我发现困难的方法时,很容易生成错误类型的IAM凭据,然后想知道为什么你的身份验证失败了。 :)