【问题标题】:Gmail SMTP is not working in ec2 instanceGmail SMTP 在 ec2 实例中不起作用
【发布时间】: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

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


【解决方案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)。

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

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

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

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

          我的想法来自SMTP Authentication Error 534

          【讨论】:

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

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

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

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

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

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

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

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

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

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

          【讨论】:

          • 效果很好......
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-28
          • 1970-01-01
          • 1970-01-01
          • 2013-11-24
          • 2015-04-23
          • 2011-10-13
          相关资源
          最近更新 更多