无法从端口 587 上的 EC2 实例发送电子邮件

无法从端口 587 上的 EC2 实例发送电子邮件

我为我们的 flask 应用程序编写了一个邮件服务,该服务使用 Celery 和 RabbitMQ 发送电子邮件(使用 gmail)。我已使 celery 消费者和生产者可以正常通信,但我无法发送电子邮件。我收到一个 socket.error:[Errno 101] 网络无法访问。

我认为这意味着 AWS 正在阻止端口 587 - 即使在我的安全组中我打开了端口 587 和 25(入站和出站)。

发生这种情况的原因是什么?任何帮助都将不胜感激。

答案1

要使用 Gmail SMTP 服务从 AWS EC2 发送电子邮件,请按照以下步骤操作。

  1. 编辑您的 EC2 实例的安全组。
  2. 编辑安全组的入站规则。
  3. 在入站规则中添加 587 端口。见下图。

在此处输入图片描述

您需要设置实例入站规则

之后,您可以使用 AWS EC2 的 587 SMTP 端口发送电子邮件。

请阅读此文章。 https://support.google.com/accounts/answer/6010255?hl=en

https://myaccount.google.com/lesssecureapps

答案2

如果 aws 防火墙包装器拒绝向外界开放 tcp/587,则可以使用 ec2 api 工具打开它:

ec2-授权 [sec-group-id] -P tcp -p 587 -s 0.0.0.0/0

虽然听起来你已经打开了它。要验证,请运行

ec2-describe-group [sec 组 ID]

关于 icmp 没有响应,您可以通过以下方式打开:

ec2-authorize [sec-group-id] -P icmp -t -1:-1 -s [你的公共 IP]/32

答案3

我花了一段时间才弄明白,但亚马逊阻止了 EC2 实例上的端口 25(SMTP),而且不清楚它是否也阻止了所有出站电子邮件: https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/?nc1=h_ls

您需要请求取消电子邮件发送限制: https://support.console.aws.amazon.com/support/contacts#/rdns-limits

相关内容