我知道之前已经问过这个问题,但是通过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一起使用。
有些想法?
答案 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凭据,然后想知道为什么你的身份验证失败了。 :)