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 实例中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 .NET core 2.2 中的 MailKit SMTP 客户端通过 Gmail SMTP 发送邮件对我不起作用
悬停在电子邮件模板中的 Gmail 和 Outlook 2007 中不起作用