Gmail SMTP 在 ec2 实例中不起作用

Posted

技术标签:

【中文标题】Gmail SMTP 在 ec2 实例中不起作用【英文标题】:Gmail SMTP is not working in ec2 instance 【发布时间】:2014-01-31 23:29:44 【问题描述】:

我正在使用基于 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:邮件未接受来自服务器,530,5.5.1 需要身份验证。了解更多信息,请致电 530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257y6sm27370508qen.21 - gsmtp

请帮忙

【问题讨论】:

我知道你说这是在其他地方工作,但你试过端口 587 吗?您可能会收到其他有用的错误消息。 在我的情况下,它在允许 ip 被 Gmail 阻止后工作。我登录了我的 gmail 帐户并在活动中允许了它阻止的 ip 【参考方案1】:

不接受来自服务器的邮件

由于过去使用 EC2 实例的人发送的垃圾邮件滥用,几乎所有流行的邮件提供商阻止从 EC2 实例接收电子邮件。电子邮件和反垃圾邮件措施的世界部分是技术性的,部分是政治性的。为此,AWS 提供了 Amazon Simple Email Service。

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

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

需要验证

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

【讨论】:

【参考方案2】:

当您从另一个 IP 地址登录时,这只需要验证 gmail 帐户,它会要求您验证您是同一个人,这里发生同样的事情它没有从亚马逊网络服务器 IP 验证,因此它需要验证您的 IP。

只做一件事就能解决问题。在 aws 服务器上远程登录并从这里登录您的 gmail 帐户,它会要求验证给它,您的邮件将很容易工作。

【讨论】:

【参考方案3】:

登录你的AWS账户,在你的实例的安全组下添加规则并允许SMTP,它会工作,检查端口号很重要。

【讨论】:

请提供更详细的解释。【参考方案4】:

转到https://www.google.com/settings/security/lesssecureapps 并将访问不太安全的应用程序设置为开启

此 gmail 安全选项如果打开关闭会检测是否存在惯常连接模式并阻止连接,除非您验证身份,但您需要一个网络界面才能这样做。

【讨论】:

这还不够。如果来自 aws,Google 仍会阻止您的登录【参考方案5】:

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

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

阅读此question & answer

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

【讨论】:

【参考方案6】:

这与您的 ec2 实例无关(除非相关的出站端口已关闭),而是因为 Gmail 确实不喜欢它无法识别的连接。如线程中所述,请确保您转到https://www.google.com/settings/security/lesssecureapps。

然后,一旦您的实例尝试连接到 SMTP 服务器(我想通过在您的 Web 应用程序中发送电子邮件),使用用于 SMTP 连接的 gmail 帐户凭据(Gmail、thunderbird,无论您正常使用)。然后,您将收到一封来自 google 的电子邮件,说明存在一些可疑活动并且他们阻止了连接,只需告诉他们 ec2 实例 IP 确实是您,您将一切就绪。

【讨论】:

【参考方案7】:

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

我是如何解决这个问题的:

    在您的 GMAIL 帐户中,开启 2 因素身份验证。当您转到帐户的常规设置时,可以在安全设置下找到它。 创建一个新的应用密码。 (该字段位于 2 因子的正下方)。你可以随心所欲地称呼它。请务必复制它。 将其用作您以前的密码。

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

注意:您不能为此选项启用“安全性较低的应用程序”。这将要求您为使用此电子邮件的每个应用程序使用应用程序密码。我必须为使用随机 Gmail 帐户的不同应用设置几个不同的密码。

我的想法来自SMTP Authentication Error 534。

【讨论】:

很好的答案,你拯救了我的一天,非常感谢【参考方案8】:

我使用的是 Gsuite 帐户。对我来说,它与以下步骤一起工作

    确保您已启用两步验证

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

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

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

    MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com 邮件端口=587 邮件用户名= 邮件密码= MAIL_ENCRYPTION=tls

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

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

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

【讨论】:

效果很好......

以上是关于Gmail SMTP 在 ec2 实例中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

样式在 Gmail 中不起作用

使用 .NET core 2.2 中的 MailKit SMTP 客户端通过 Gmail SMTP 发送邮件对我不起作用

Grails 发送邮件不起作用

悬停在电子邮件模板中的 Gmail 和 Outlook 2007 中不起作用

Android ACTION_SEND 超链接在 GMail 中不起作用

WebSockets 在 Amazon ec2 环境中不起作用