dji*_*i33 6 openssl smtp node.js amazon-ses nodemailer
更新:如果我按照使用命令行使用 Amazon SES SMTP 接口发送电子邮件 中的 说明进行操作,我可以从本地和 ec2 实例完美发送电子邮件。
我们使用 nodemailer 通过 SMTP 发送电子邮件。当我们使用 Gmail 的 SMTP 用户/密码配置所有内容时,一切正常。
我们正在尝试迁移到 AWS SES。一切似乎都设置得很好(域已验证,我们脱离了沙盒模式,并且我们正在使用 SMTP 用户/密码凭据)。
我们使用完全相同的代码,只是交换凭证文件中的 smtp 用户/通行证/主机。使用 SES 凭据发送邮件时,我们收到此错误:
Email was not send due to the following error: [Error: 62024:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332:
] {
library: 'SSL routines',
function: 'ssl3_get_record',
reason: 'wrong version number',
code: 'ESOCKET',
command: 'CONN'
}
Run Code Online (Sandbox Code Playgroud)
根据这个GitHub问题,问题似乎是:
您尝试在非 TLS 端口上使用 TLS,或者您使用的 openssl 版本与服务器不兼容。
我不太确定如何处理这些信息。我们的 SSL 证书位于 ELB 上。
以下是负责发送实际电子邮件的代码:
"use strict";
const nodemailer = require("nodemailer");
const transporter = nodemailer.createTransport({
host: process.env.SMTP_HOST,
port: process.env.SMTP_PORT,
secure: process.env.SMTP_SECURE,
auth: {
user: process.env.SMTP_AUTH_USER,
pass: process.env.SMTP_AUTH_PASS
}
});
module.exports = {
sendMail: (to, subject, html, callback) => {
const mailOptions = {
from: "no-reply@xyz.com",
to,
subject,
html
};
transporter.sendMail(mailOptions, (err, info) => {
if (err) {
return callback(err);
}
return callback(null, info);
});
}
};
Run Code Online (Sandbox Code Playgroud)
secure当选项为 时,使用端口 465 true。
我按照@moulder对这个问题的评论进行了评论,结果成功了。
需要明确的是,您应该使用 465, true 来使用 SSL 进行连接,或使用 587, false 来不使用 SSL 进行连接并通过 STARTTLS 进行升级。任何其他组合都不起作用。代码有问题,在这里修复:
就像有 HTTP 和 HTTPS(“s”代表安全)一样,也有 SMTP 和 SMTPS(有点)... 至于通信的安全版本,有多种方法可以建立这种安全性。
来源:Amazon SES 文档 - 连接到 SMTP 终端节点
| 归档时间: |
|
| 查看次数: |
3302 次 |
| 最近记录: |