首页 > 解决方案 > 尝试使用 smtp-relay.gmail.com 和 Nodemailer 发送电子邮件。错误 ssl3_get_record: 错误的版本号

问题描述

尝试使用 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 所说的使用TLSLink1 Link2

在此处输入图像描述

在此处输入图像描述

这就是 Nodemailer 所说的:链接

在此处输入图像描述

继续

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

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

注意:我正在尝试 port 587

{ [错误:13252:错误:1408F10B:SSL 例程:ssl3_get_record:错误的版本号:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332:] 代码:'ESOCKET',命令:'连接'}

如果我更改为 port 465,我会收到此错误:

'535-5.7.8 用户名和密码不被接受。了解详情\n535 5.7.8 https://support.google.com/mail/?p=BadCredentials ',响应代码:535,命令:'AUTH PLAIN' }

我知道我的用户和通行证是正确的。

我究竟做错了什么?

标签: emailssltls1.2nodemailergoogle-workspace

解决方案


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

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

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


推荐阅读