尝试使用 smtp-relay.gmail.com 和 Nodemailer 发送电子邮件。错误 ssl3_get_record:wrong 版本号

Trying to send email using smtp-relay.gmail.com and Nodemailer. Error ssl3_get_record:wrong version number

正在尝试通过 G Suite smtp-relay 使用 Nodemailer 发送电子邮件。

const transporter = nodemailer.createTransport({
  host: "smtp-relay.gmail.com",
  port: 587,
  secure: true,
  auth: {
    user: "username@mydomain.com",
    pass: "password"
  }
});

const result = await transporter.sendMail({
  from: `'"JOHN" <john@externaldomain.com>'`,
  to: "hello@mydomain.com",
  subject: "Hello",
  text: "Hello world!",
});

这就是 G Suite 关于使用 TLS 的说法:Link1 Link2

Nodemailer 是这么说的:Link

继续

基本上 G Suite 告诉我应该为 TLS 使用端口 587,而 Nodemailer 告诉我不应该。

不知道它是否与端口有关,但这是我收到的错误:

注意:我正在尝试端口 587

{ [Error: 13252:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332: ] code: 'ESOCKET', command: 'CONN' }

如果我更改到端口 465,我会收到此错误:

'535-5.7.8 Username and Password not accepted. Learn more at\n535 5.7.8 https://support.google.com/mail/?p=BadCredentials ', responseCode: 535, command: 'AUTH PLAIN' }

我知道我的用户和密码是正确的。

我做错了什么?

Basically G Suite tells me that I should use port 587 for TLS, and Nodemailer says I shouldn't.

两者都在谈论不同的事情。第一个(G Suite)谈论 SSL 与 TLS,即比较协议的各种版本。第二个(Nodemailer)讨论显式与隐式 TLS,即使用 STARTTLS 命令(端口 25 和 587)显式升级普通连接或在 TCP 连接(端口 465)后直接建立 TLS。

因此,按照 Nodemailer 的建议设置 secure: false。如果您想强制使用 TLS,即如果邮件服务器不支持 STARTTLS 则失败,则设置 requireTLS: true as documented.