MENU
- 前言
- 邮箱授权码的申请流程
- Node
- 连续发送邮件失败的原因
前言
1、代码段的主要功能是通过nodemailer模块从一个QQ邮箱发送电子邮件。
2、代码段实现从QQ邮箱1283077926@qq.com
发送一封邮件到2506562048@qq.com
,邮件主题为“微信公众号推广”,正文为“亲爱的2506562048,您好!邀请您关注"智码帮"微信公众号。”。
3、在使用此代码时,注意要将授权码pass替换为实际的授权码,并确保发送者邮箱的SMTP服务已开启。
邮箱授权码的申请流程
第一步
打开网页版QQ邮箱
第二步
使用对应QQ号扫码登录邮箱
第三步
点击账号与安全
第四步
点击安全设置
第五步
点击生成授权码
第六步
账号验证
第七步
至此授权码获取成功。
需要注意第五步,如果是第一次,那么需要加一个绑定的过程,生成授权码
的按钮处于不可点击状态。
Node
代码
const nodemailer = require('../../nodeModules/node_modules/nodemailer');
const user = '1283077926@qq.com';
init();
function init() {
// 创建一个邮件传输器
const transmitter = nodemailer.createTransport({
service: 'qq',
auth: {
// 发送者的QQ邮箱
user,
// QQ邮箱的授权码,不是QQ邮箱登录密码
pass: 'xpqrsnnlgxqugffg'
}
});
// 邮件信息
let mailOptions = {
// 发送者邮箱
from: user,
// 接收者邮箱
to: `2506562048@qq.com`,
// 邮件主题
subject: '微信公众号推广',
// 邮件内容(纯文本)
text: '亲爱的2506562048,您好!邀请您关注"智码帮"微信公众号。'
};
// 发送邮件
transmitter.sendMail(mailOptions, (error, info) => {
if (error) {
console.log('发送失败: ', error);
} else {
console.log('发送成功:', info);
}
});
}
解析
引入nodemailer模块
代码行引入nodemailer模块。nodemailer是一个用于在Node环境中发送邮件的模块。这里使用require函数从指定路径加载模块。
定义发送者邮箱
代码行定义一个常量user,保存发送邮件的QQ邮箱地址。
初始化函数init
代码行调用init函数,开始执行邮件发送的整个流程。
函数init的实现
1、createTransport
方法用于创建一个邮件传输器transmitter,它包含邮件的发送方式和授权信息。
2、service: 'qq'
指定使用QQ邮箱服务。
3、auth
对象包含授权信息。
4、user
发送邮件的QQ邮箱地址。
5、pass
QQ邮箱的授权码,授权码在QQ邮箱的设置中生成,而不是QQ邮箱的登录密码。这个授权码允许第三方应用(如,nodemailer)使用QQ邮箱来发送邮件。
mailOptions定义邮件信息
1、定义邮件的具体信息。
2、from
邮件发送者的邮箱地址。
3、to
收件人的邮箱地址,这里设置为2506562048@qq.com
。
4、subject
邮件的主题,设为"微信公众号推广"。
5、text
邮件的正文内容,是纯文本格式,内容为"亲爱的2506562048,您好!邀请您关注"智码帮"微信公众号。"
发送邮件
sendMail方法用于发送邮件,它接受两个参数。
mailOptions
包含邮件信息的对象。
一个回调函数用于处理发送邮件后的结果。
如果发送失败,会打印出错误信息error。
如果发送成功,会打印出发送成功的信息info,其中包含邮件发送的详细信息。
连续发送邮件失败的原因
邮箱服务器限制
邮箱服务器(如,QQ邮箱)通常会对短时间内发送大量邮件的账户进行限制,以防止垃圾邮件。这种限制可能包括发送频率的限制和单日发送邮件数量的限制。
错误处理机制
代码中的错误处理部分可能导致发送失败时重复发送同一个邮件,触发邮箱的反垃圾邮件机制。每次发生错误时,立即再次尝试发送邮件,这可能让服务器认为这是异常行为。
邮箱授权码问题
QQ邮箱的授权码需要正确设置和保持有效。如果发送过程中授权码被更改或失效,后续邮件将无法发送。