server - 网络解决方案 通过nodemailer配置SMTP邮件
问题描述
当我使用以下邮件配置时:
options = {
host: 'smtp.XXXX.com',
port: 2525,
secure: false,
ignoreTLS: true,
authMethods: ['PLAIN', 'LOGIN', 'XOAUTH2'],
auth: {
user: 'no_reply@XXXX.com',
pass: 'XXXXX'
},
它返回一个错误,即
当我使用以下配置时:
options = {
host: 'smtp.XXXX.com',
port: 465,
secure: true,
ignoreTLS: true,
authMethods: ['PLAIN', 'LOGIN', 'XOAUTH2'],
auth: {
user: 'no_reply@XXXX.com',
pass: 'XXXXX'
},
};
它给出了错误:带有错误代码 ECONNECTION 的 ECONNREFUSED 我不知道我应该为网络解决方案 SMTP 使用什么端口和配置。
解决方案
如果您使用的是 NodeJS v0.9.2 或更高版本,那么您会发现 Node 正在为 TLS 和 HTTPS 进行默认证书验证。
这是发行说明:
tls, https:默认验证服务器证书 (Ben Noordhuis)
这很可能是您面临的问题的主要原因。
您可以通过在拨打电话之前简单地添加此行来避免此问题:
rejectUnauthorized: false
但这可能会产生严重的安全隐患。即使数据是加密的,由于这种绕过验证规则,中间人实际上可以窃取您的数据。您将要发送的数据可能不会登陆到原始接收服务器,它可能会被转移到黑客的服务器。
由于上述原因,这是一种快速修复方法,但不是推荐的方法。
理想情况下,您应该通过确保证书由受信任的 CA 签名来验证接收服务器。
您可能需要使用 smtp 提供程序进一步调试,以了解验证中的差距。每个证书都有一个“主题”,主题有一个“通用名称”。并且可以有多个与之关联的“subjectAltNames”。在验证期间,Node 实际上会检查端点并尝试将其与 Common Name 或其中一个 subjectAltNames 匹配。如果存在不匹配,则会引发错误,例如:主机名/IP 与证书的替代名称不匹配
最有可能的是,PORT 不是问题。证书验证是个问题。
希望这能解决问题。
推荐阅读
- c - 返回矩阵函数中的矩阵和
- php - 如何在 Visual Studio Code 中运行与 PHP 集成的 HTML 代码
- r - 检查 R 中两个单独数据帧的日期和时间是否重叠
- python - 如何在我的 python 脚本中存储密码,但在部署到 Github 时是否会被任何用户隐藏?
- java - 第二个活动无法从意图中读取 getExtras
- c - recv 在套接字编程中是如何工作的?
- firebase - 未来的 for 循环在 Flutter 中不起作用并打印错误
- python - $ pytest 和 $ python -m pytest 测试之间的区别
- c# - ACTION_BOOT_COMPLETED 接收器不工作
- ios - Swift 重置约束崩溃