【问题标题】:Cannot connect to AWS SES SMTP endpoint无法连接到 AWS SES SMTP 终端节点
【发布时间】:2020-08-29 16:01:27
【问题描述】:

我正在构建一个应用程序,它将使用 AWS SES 通过 SMTP 发送电子邮件。我已经正确配置了一个域,并确认我可以使用 AWS 开发工具包从该域发送电子邮件。我已创建 SMTP 凭证并确保 IAM 用户正确配置了正确的权限。我编写了一个使用Nodemailer 发送电子邮件的测试脚本。

测试脚本在我的家庭网络上使用我的个人开发机器成功运行,但在我的家庭网络上使用我的公司客户发布的开发笔记本电脑时,该脚本将无法运行。公司笔记本电脑运行许多安全工具,包括 ZScaler。我也知道,由于ZScaler服务,NPM必须设置为使用自签名证书(命令为npm config set cafile {CA_FILEPATH})。

我不知道为什么该脚本无法在公司笔记本电脑上运行,如果在确定下一步要尝试什么方面提供帮助,我将不胜感激。

这是脚本:

'use strict';

const nodemailer = require('nodemailer');

const runtest = async function() {
    console.debug('Creating the SMTP transport');
    const transporter = nodemailer.createTransport({
      host: 'email-smtp.us-west-2.amazonaws.com',
      port: 465,
      secure: true,
      auth: {
        user: 'myusername',
        pass: 'mypassword',
      },
    });

    console.debug('Building mail options');
    const mailOptions = {
      from: 'me@example.com',
      to: 'you@example.com',
      subject: 'subject',
      text: 'body',
      html: '<h1>Hi</h1',
    };

    console.debug('Sending mail...');
    const info = await transporter.sendMail(mailOptions);
    console.debug(`Sent mail.  Info: ${JSON.stringify(info, null, 2)}`);
    console.info('Message sent!');
};
runtest().catch(console.error);

这是从公司笔记本电脑运行时的结果:

Creating the SMTP transport
Building mail options
Sending mail...
Error: read ECONNRESET
    at TLSWrap.onStreamRead (internal/stream_base_commons.js:200:27) {
  errno: 'ECONNRESET',
  code: 'ESOCKET',
  syscall: 'read',
  command: 'CONN'
}

我尝试过的事情:

  • 使用 TLS 设置(例如 rejectUnauthorized: false)并指定 TLS 版本
  • 连接到公司 VPN 或断开与公司 VPN 的连接
  • 我在this Github issue 上找到了一个参考,该参考建议测试与openssl 的连接。我运行了这个命令openssl s_client -connect email-smtp.us-west-2.amazonaws.com:465,结果是这样的(看起来还可以):
CONNECTED(0000021C)
write:errno=10054
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 336 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---

【问题讨论】:

  • 您公司笔记本电脑中的节点版本是什么。尝试使用 v12 以上的节点版本,看看它是否出现
  • 公平的问题。我的笔记本电脑目前使用的是 v12.15.0。
  • 请尝试最新的。 13 或 14

标签: node.js amazon-web-services email ssl


【解决方案1】:

在我的例子中,是节点版本导致了这个错误。我已将我的节点版本升级到 v12.x 以解决此问题。

【讨论】:

  • 我的笔记本目前使用的是v12.15.0,我使用NVM for Windows安装14.9.0,刷新包,重试。不幸的是,我仍然得到相同的结果。不过,谢谢你的建议。
  • 很抱歉没有帮到您。安装后,您是否确保在测试时 nodejs 为 14。你可以node -v来确认
  • 是的,我运行该命令来确认版本,删除所有本地 npm 包,并在运行测试之前重新安装它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多