更新: 如果我按照使用命令行通过Amazon SES SMTP接口发送电子邮件中的说明进行操作,则可以从本地实例和ec2实例中完美地发送电子邮件。
我们正在使用nodemailer通过SMTP发送电子邮件。当我们使用Gmail的SMTP用户/密码配置所有内容时,一切正常。
我们正在尝试迁移到AWS SES。一切似乎都设置正确(域已验证,我们已退出SANDBOX模式,并且正在使用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'
}
根据这个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);
});
}
};
使用端口465时,secure
选项true
。
为了清楚起见,你应该使用465(真)来使用SSL进行连接,或者使用587(真)来进行不使用SSL的连接并通过STARTTLS进行升级。其他任何组合均无效。该代码是错误的,在此处进行了修复:
就像有HTTP和HTTPS(“ s”代表安全)一样,也有SMTP和SMTPS(kinda)……至于通信的安全版本,存在建立这种安全性的方法。