【问题标题】:Setting up Meteor Email with AWS SMTP使用 AWS SMTP 设置 Meteor 电子邮件
【发布时间】:2017-05-16 18:30:28
【问题描述】:

此 Meteor 服务器代码尝试从服务器启动时发送电子邮件。
我在阅读 AWS docs 后遵循的步骤是:
1) 验证也在 AWS webMail 上的电子邮件地址。
2) 用于增加发送限制。
3) 创建和接收 SMTP 凭证。

流星 1.4.4.2
电子邮件@1.2.1

//server/main.js

smtp = {
  'username': 'from smtp credentials',
  'password': 'from smtp credentials',
  'host': 'email-smtp.us-east-1.amazonaws.com',
  'port': '465',
  'auth': true
};
process.env.MAIL_URL = 'smtp://' + encodeURIComponent(smtp.username) + ':' + encodeURIComponent(smtp.password) + '@' + encodeURIComponent(smtp.outgoingServer) + ':' + smtp.outgoingPort;

Meteor.startup(() => {

      Email.send({
        to: 'my-aws-verified-email@comp.com',
        subject: 'sending-to-myselft',
        text: 'Just checking if it is working'
      });
});

错误:getaddrinfo ENOTFOUND undefined undefined:587

知道如何让它工作吗?谢谢

编辑
process.env.MAIL_URL 值更改为:

process.env.MAIL_URL = 'smtp://' + encodeURIComponent(smtp.username) + 
':' + encodeURIComponent(smtp.password) + 
'@' + encodeURIComponent(smtp.host) + 
':' + smtp.auth + ':' + smtp.port;

现在的错误是:

错误:从未收到问候

将端口更改为“587”会产生不同的错误:

错误:邮件命令失败:501 提供的 MAIL FROM 地址无效

telnet email-smtp.us-east-1.amazonaws.com 465
Trying 107.21.244.69...
Connected to ses-smtp-prod-335357831.us-east-1.elb.amazonaws.com.
Escape character is '^]'.
Connection closed by foreign host.

telnet email-smtp.us-east-1.amazonaws.com 2465
Trying 54.221.247.194...
Connected to ses-smtp-prod-335357831.us-east-1.elb.amazonaws.com.
Escape character is '^]'.
Connection closed by foreign host.

telnet email-smtp.us-east-1.amazonaws.com 25
Trying 54.243.106.227...
telnet: connect to address 54.243.106.227: Connection refused
Trying 107.21.244.69...
telnet: connect to address 107.21.244.69: Connection refused
Trying 23.21.91.54...
telnet: connect to address 23.21.91.54: Connection refused
Trying 50.19.94.229...
telnet: connect to address 50.19.94.229: Connection refused
Trying 54.235.77.145...
telnet: connect to address 54.235.77.145: Connection refused
Trying 54.243.97.84...
telnet: connect to address 54.243.97.84: Connection refused
Trying 23.23.104.248...
telnet: connect to address 23.23.104.248: Connection refused
Trying 54.221.247.194...
telnet: connect to address 54.221.247.194: Connection refused
telnet: Unable to connect to remote host

telnet email-smtp.us-east-1.amazonaws.com 587
Trying 54.221.247.194...
Connected to ses-smtp-prod-t5t357831.us-east-1.elb.amazonaws.com.
Escape character is '^]'.
220 email-smtp.amazonaws.com ESMTP SimpleEmailService-1110753669 CalqM0Qfzgny2ooZ0wo5
421 Timeout waiting for data from client.
Connection closed by foreign host.

telnet email-smtp.us-east-1.amazonaws.com 2587
Trying 23.23.104.248...
Connected to ses-smtp-prod-337800831.us-east-1.elb.amazonaws.com.
Escape character is '^]'.
220 email-smtp.amazonaws.com ESMTP SimpleEmailService-20753669yy 4qrIfUj4ApTwkj4ZJUNa
421 Timeout waiting for data from client.
Connection closed by foreign host.

【问题讨论】:

  • 端口 25 上的测试没有证明什么。 EC2 在端口 25 上进行了一些创造性过滤。端口 465 仅是 TLS,所以客户端先说话......所以这两个都很好。端口 587(顺便说一句,这是正确的端口)上的测试也完全显示了我的预期。坚持使用 587。你能在 SMTP 事务上捕获一些调试,返回 501 错误吗?这应该可以准确地告诉您您需要知道的内容......虽然,Email.send({... 需要一个 from 地址,不是吗?
  • 通过将端口更改为 587 并按照建议添加“from”来修复。现在它可以正常工作了。谢谢

标签: email amazon-web-services meteor


【解决方案1】:

您同时解决了两个问题,当您解决其中一个问题时,您并没有明显取得进展,因为您遇到了另一个问题。

对于出站电子邮件,SES 侦听两组端口。

标准端口 587、传统(但错误的)端口 25 和非特权端口 2587 上的 STARTTLS。

标准端口 465 和非特权端口 2465 上的 TLS Wrapper。

这两组的区别在于 SSL (TLS) 的协商方式。使用 STARTTLS,服务器先对话,客户端要求连接切换到加密模式……而使用 TLS Wrapper,连接以 TLS 开始,但客户端先对话,启动 TLS 协商。

显然,根据这些描述,当客户端预期使用 STARTTLS 时使用 TLS Wrapper 端口将导致超时,因为双方都在等待对方通话。

端口 25 不是赢家,因为 EC2 默认启用了激进的速率限制,以防止明显的垃圾邮件问题,否则会发生。您可以通过提交支持请求来要求禁用此功能,但最简单的解决方案是仅使用端口 587。

http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-connect.html

那么,您的客户端没有设置发件人地址,因为没有指定from 地址。

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 2011-07-30
    • 1970-01-01
    • 2013-12-18
    • 2018-07-13
    • 2016-04-17
    • 2019-02-11
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多