nodemailer使用授权码和不用授权码的两种方式
写在最前方:
之所以用这个标题,是因为肯定会有初学者在使用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: 'example@efd.com.cn', // 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: <04ec7731-cc68-1ef6-303c-61b0f796b78f@qq.com>
});
没有开启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: 'oms@xxxx.com',
pass: 'xxxxx', // 类似qq这些, 需要授权码, 一般其它的企业邮箱, 不需要授权码(比如阿里邮箱, 应该)
},
tls: {
rejectUnauthorized: false, // 拒绝认证就行了, 不然会报证书问题
},
}
【nodemailer使用授权码和不用授权码的两种方式】有些邮件服务提供商的pass是需要授权码的, 比如qq, 这时的pass就应该是你的qq授权码, 而不是密码!
谢谢观看!!!
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程
- 使用composer自动加载类文件
- android|android studio中ndk的使用
- 使用协程爬取网页,计算网页数据大小