Gmail SMTP无法在ec2实例中使用

时间:2014-01-13 09:22:12

标签: php amazon-web-services amazon-ec2 smtp

我正在使用基于Ubuntu的ec2实例,最近我已将我的代码转移到aws上,似乎电子邮件功能无效。我正在使用gmail SMTP服务 下面是我的代码

'Smtpmail'=>array(
        'class'=>'application.extensions.smtpmail.PHPMailer',
        'Host'=>"smtp.gmail.com",
        'Username'=>'username',
        'Password'=>'password',
    'From'=>'from addr', 
    'setForm'=>'from name',
        'Mailer'=>'smtp',
    'SMTPSecure'=>'tls',
        'Port'=>25,
        'SMTPAuth'=>true, 
    ),

this code is working on my unix based server but on aws it is giving below error

邮件程序错误:以下发件人地址失败:test@email.com:MAIL未被服务器接受,530,5.5.1需要验证。在530 5.5.1了解更多信息http://support.google.com/mail/bin/answer.py?answer=14257 y6sm27370508qen.21 - gsmtp

请帮忙

8 个答案:

答案 0 :(得分:11)

  

不接受来自服务器的邮件

由于历史上使用EC2实例的人发送的垃圾邮件滥用,几乎所有流行的邮件提供商阻止收到来自EC2实例的电子邮件。电子邮件和反垃圾邮件措施的世界是部分技术的,部分政治的。因此,AWS提供Amazon Simple Email Service。

AWS与邮件提供商合作,确保SES使用的节点已列入白名单,因为我们会事先进行适当的授权/验证。

在这种情况下,从一台服务器而非AWS发送电子邮件的能力很可能是由于EC2的IP范围被Google列入黑名单。

  

需要身份验证

如果相同的用户/通行证在其他地方没有变化,我不知道该说些什么。我知道很多邮件流量不再使用端口25,而是选择非{1 587和SSL 465。这是我开始寻找解决方案的第一个地方。

答案 1 :(得分:2)

这与您的ec2实例无关(除非相关的出站端口已关闭),但事实上Gmail确实不喜欢无法识别的连接。如主题所述,请务必转到https://www.google.com/settings/security/lesssecureapps

然后,一旦您的实例尝试连接到SMTP服务器(通过在我的Web应用程序中发送电子邮件),请使用用于SMTP连接的Gmail帐户凭据连接到您的邮件客户端(Gmail,thunderbird,无论您通常使用)。然后,您将收到来自谷歌的电子邮件,说明存在一些可疑活动并且他们阻止了连接,只是告诉他们ec2实例IP确实是您,并且您将全部设置。

答案 2 :(得分:2)

在AWS Lambda上使用TLS连接(端口号:587)。

我如何解决问题:

  1. 在您的GMAIL帐户中,启用2要素身份验证。当您进入帐户的常规设置时,可以在安全设置下找到它。
  2. 创建一个新的应用密码。 (该字段在2因子正下方)。您可以随便叫它。只要确保将其复制即可。
  3. 使用该密码作为您以前的密码。

我这样做了,可以毫无问题地从AWS Lambda发送电子邮件。

注意:您不能为此选项打开“ Less Secure Apps”。这将要求您为使用此电子邮件的每个应用程序使用应用程序密码。我必须为使用随机Gmail帐户的不同应用输入一些不同的密码。

我从SMTP Authentication Error 534得到了这个主意。

答案 3 :(得分:1)

这只需要验证gmail帐户,当你从另一个IP地址登录时,它会要求验证你是同一个人在这里发生同样的事情它不是从亚马逊网络服务器IP验证所以它需要验证你的IP。 / p>

只有一件事能解决问题。在aws服务器上远程登录并从此处登录您的Gmail帐户,它将要求验证,并且您的邮件将轻松运行。

答案 4 :(得分:1)

转到https://www.google.com/settings/security/lesssecureapps并将访问安全性较低的应用设置为开启

如果关闭,此gmail安全选项会检测是否存在居住连接模式并阻止连接,除非您验证自己的身份,但是您需要一个网络界面来执行此操作。

答案 5 :(得分:1)

如果您使用端口25进行SMTP,则需要在EC2实例安全组入站规则上打开SMTP端口。

注意:Gmail不提供不安全连接中的端口25。对于使用端口25,根据gmail Configuration requirements

需要安全连接

阅读此question & answer

How do I use Gmail SMTP with port 587 on AWS EC2?

答案 6 :(得分:0)

登录您的AWS账户,在您的实例的安全组下添加规则并允许SMTP,它将正常工作,检查端口号是否重要。

答案 7 :(得分:0)

我使用的是 Gsuite 帐户。对我来说,它适用于以下步骤

  1. 确保您已启用两步验证

  2. 从 myaccount.google.com 生成应用密码 -> 安全性(来自左侧面板)-> 两步验证(在“登录谷歌”部分下)

  3. 启用两步验证后,生成应用密码。

  4. 在 .env 上的 config/mail.php 中使用该应用密码以及以下设置

    MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME= 邮件密码= MAIL_ENCRYPTION=tls

  5. 打开终端/命令提示符并连接到EC2服务器并运行以下命令清除配置和缓存

    php artisan 配置:缓存 php artisan 缓存:清除

  6. 如果仍然无效,请单击以下链接(确保您使用要用于通过 Gsuite 发送电子邮件的帐户登录) https://accounts.google.com/DisplayUnlockCaptcha