email - 尝试使用 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 所说的使用TLS
:Link1 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' }
我知道我的用户和通行证是正确的。
我究竟做错了什么?
解决方案
基本上,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。
推荐阅读
- java - 如何从 java 应用程序运行 windows 命令提示符?
- kubernetes - 如何将 PodSecurityPolicy 应用于非 kube-system 命名空间资源?
- java - Spring xml主bean
- javascript - 如何将变量从 node.js 函数传递到 graphql-tag?
- arrays - 将数组元素的基数从八进制更改为十进制(在远程运行的本地 bash 脚本中)
- java - 如何将自定义 restTemplate istance 添加到 RestTemplateEurekaHttpClient
- python - 如何为一系列不同的问题输入 10 次
- android - Android Keystore 崩溃,大多数在三星设备、Android 8 和 8.1 上,在 Android 应用程序启动时
- python - 如何在类中的函数中使用追加和扩展而不在同一个类中明确定义它们?
- c# - Azure 函数:客户 HTTP 路由中的查询参数有问题