写在最前方:
之所以用这个标题,是因为肯定会有初学者在使用nodemailer的点点困惑,当使用邮箱密码去发送的时候,难免会报各种错
开启了SMTP的使用方式
首先一定要开启SMTP服务,怎么开启不多说,各个第三方提供商的方式都不一样
一般都在对应的web mail网站上的设置里
yarn add nodemailer
or
npm i -S nodemailer
const nodemailer = require('nodemailer');
const mailTransport = nodemailer.createTransport({
host : 'smtp.example.com',
secure: true, // 使用SSL方式(安全方式,防止被窃取信息)
auth : {
user : '你的邮箱地址',
pass : '你的邮箱授权码'
},
});
const mailOptions = {
from: '"JavaScript之禅" ', // sender address
to: '[email protected]', // list of receivers
subject: 'Hello', // Subject line
// 发送text或者html格式
// text: 'Hello world?', // plain text body
html: 'Hello world?' // html body
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
// Message sent: <[email protected]>
});
没有开启SMTP的方式
这个非授权码方式只是我随便取的, 因为公司的邮件服务器,不知道为什么,采用上面的方式会报错,
{ [Error: 11432:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332:
] code: 'ECONNECTION', command: 'CONN' }
这个我第一反应就是, 我端口错了吗?,然后把secure设置为false,现在的报错形式为:
Host: smtp.3nod.com.cn. is not in the cert\'s altnames: DNS:mail.cuchost.com, DNS:autodiscover.cuchost.com, DNS:cp.cuchost.com, DNS:attachment.cuchost.com, DNS:webapp.cuchost.com
大意就是邮件服务器不在(CA)证书名单之内,WHAT?然后各种百度,找到了如下解释
https://cnodejs.org/topic/5a803771497a08f571384fd7
链接在这里
不看链接的请看这里
{
host : 'smtp.example.com',
secure: false, // 设置为false
auth : {
user : '你的邮箱地址',
pass : '你的邮箱密码'
},
tls: {
rejectUnauthorized: false
},
},
2020/05/09更新~~~~~~~~~
时隔这么久, 重新再用这个nodeMailer, 本地测试是行得通的, 但是linux服务器25端口是会严格把控的, 这时可以换一个端口, 这么写:
{
host: 'smtp.xxxx.com',
port: 465,
secure: true, // 设置为true
auth: {
user: '[email protected]',
pass: 'xxxxx', // 类似qq这些, 需要授权码, 一般其它的企业邮箱, 不需要授权码(比如阿里邮箱, 应该)
},
tls: {
rejectUnauthorized: false, // 拒绝认证就行了, 不然会报证书问题
},
}
有些邮件服务提供商的pass是需要授权码的, 比如qq, 这时的pass就应该是你的qq授权码, 而不是密码!
谢谢观看!!!