Node.js - 群发邮件
<h2>一、安装邮件服务模块 - nodemailer</h2><div class="cnblogs_code">
<pre>npm install --save nodemailer </pre>
</div>
<p> </p>
<p> </p>
<h2>二、新建一个 js 文件,配置 nodemailer (下面以 QQ 邮箱为例)</h2>
<div class="cnblogs_code">
<pre>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
const nodemailer </span>= require('nodemailer'); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入 nodemailder</span>
let Email_QQ =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 以 QQ 邮箱为例子代码如下,如需配置其他邮箱,可查看文章第三点 nodemailer 各邮箱相关配置 </span>
host: 'smtp.qq.com'<span style="color: rgba(0, 0, 0, 1)">,
port: </span>465<span style="color: rgba(0, 0, 0, 1)">,
secure: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
auth: {
user: </span>'9999999@qq.com', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 发送人邮箱</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这里是 stmp 授权码,并非邮箱密码,</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 如未开通 stmp 请查阅 https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256</span>
pass: 'qqqqqqqqqqqqqq'<span style="color: rgba(0, 0, 0, 1)">
}
}
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> sendEMail(mail, text) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建发送邮件服务 nodemailer 对象,传入 QQ 设置,当然你也可以开发接口从前端传入不同的 user 和对应的 pass</span>
let transporter =<span style="color: rgba(0, 0, 0, 1)"> nodemailer.createTransport(Email_QQ);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 邮件的相关信息</span>
let msg =<span style="color: rgba(0, 0, 0, 1)"> {
from: </span>'9999999@qq.com', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 发送人邮箱</span>
to: mail, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 接收者邮箱,多个邮箱用逗号间隔</span>
<span style="color: rgba(0, 0, 0, 1)">
subject: </span>'nodemailer 群发邮件测试~~!', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 邮件标题</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> text: '纯文本内容。。。', // text 和 html 属性二选一</span>
html: text <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> html 文本内容,可以添加 html 元素</span>
<span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 发送邮件</span>
transporter.sendMail(msg, (err, res) =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (res) {
let len </span>=<span style="color: rgba(0, 0, 0, 1)"> res.accepted.length
let from </span>=<span style="color: rgba(0, 0, 0, 1)"> res.envelope.from
console.log(</span>'已从' + from + '邮箱成功发出' + len + '个邮件'<span style="color: rgba(0, 0, 0, 1)">)
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'err : '<span style="color: rgba(0, 0, 0, 1)">, err)
}
})
}
module.exports </span>= sendEMail;</pre>
</div>
<p> </p>
<p> </p>
<p> </p>
<h2>三、nodemailer 各邮箱相关配置</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"1und1"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.1und1.de"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>"authMethod": "LOGIN"<span style="color: rgba(0, 0, 0, 1)">
},
</span>"AOL"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"domains": ["aol.com"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.aol.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 587<span style="color: rgba(0, 0, 0, 1)">
},
</span>"DebugMail"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "debugmail.io"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 25<span style="color: rgba(0, 0, 0, 1)">
},
</span>"DynectEmail"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"aliases": ["Dynect"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.dynect.net"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 25<span style="color: rgba(0, 0, 0, 1)">
},
</span>"FastMail"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"domains": ["fastmail.fm"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.fastmail.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"GandiMail"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"aliases": ["Gandi", "Gandi Mail"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "mail.gandi.net"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 587<span style="color: rgba(0, 0, 0, 1)">
},
</span>"Gmail"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"aliases": ["Google Mail"<span style="color: rgba(0, 0, 0, 1)">],
</span>"domains": ["gmail.com", "googlemail.com"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.gmail.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"Godaddy"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtpout.secureserver.net"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 25<span style="color: rgba(0, 0, 0, 1)">
},
</span>"GodaddyAsia"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.asia.secureserver.net"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 25<span style="color: rgba(0, 0, 0, 1)">
},
</span>"GodaddyEurope"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.europe.secureserver.net"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 25<span style="color: rgba(0, 0, 0, 1)">
},
</span>"hot.ee"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "mail.hot.ee"<span style="color: rgba(0, 0, 0, 1)">
},
</span>"Hotmail"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"aliases": ["Outlook", "Outlook.com", "Hotmail.com"<span style="color: rgba(0, 0, 0, 1)">],
</span>"domains": ["hotmail.com", "outlook.com"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.live.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 587<span style="color: rgba(0, 0, 0, 1)">
},
</span>"iCloud"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"aliases": ["Me", "Mac"<span style="color: rgba(0, 0, 0, 1)">],
</span>"domains": ["me.com", "mac.com"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.mail.me.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 587<span style="color: rgba(0, 0, 0, 1)">
},
</span>"mail.ee"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.mail.ee"<span style="color: rgba(0, 0, 0, 1)">
},
</span>"Mail.ru"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.mail.ru"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"Maildev"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"port": 1025<span style="color: rgba(0, 0, 0, 1)">,
</span>"ignoreTLS": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"Mailgun"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.mailgun.org"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"Mailjet"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "in.mailjet.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 587<span style="color: rgba(0, 0, 0, 1)">
},
</span>"Mailosaur"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "mailosaur.io"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 25<span style="color: rgba(0, 0, 0, 1)">
},
</span>"Mailtrap"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.mailtrap.io"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 2525<span style="color: rgba(0, 0, 0, 1)">
},
</span>"Mandrill"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.mandrillapp.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 587<span style="color: rgba(0, 0, 0, 1)">
},
</span>"Naver"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.naver.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 587<span style="color: rgba(0, 0, 0, 1)">
},
</span>"One"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "send.one.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"OpenMailBox"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"aliases": ["OMB", "openmailbox.org"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.openmailbox.org"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"Outlook365"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.office365.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 587<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"Postmark"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"aliases": ["PostmarkApp"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.postmarkapp.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 2525<span style="color: rgba(0, 0, 0, 1)">
},
</span>"qiye.aliyun"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.mxhichina.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": "465"<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"QQ"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"domains": ["qq.com"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.qq.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"QQex"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"aliases": ["QQ Enterprise"<span style="color: rgba(0, 0, 0, 1)">],
</span>"domains": ["exmail.qq.com"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.exmail.qq.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"SendCloud"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtpcloud.sohu.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 25<span style="color: rgba(0, 0, 0, 1)">
},
</span>"SendGrid"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.sendgrid.net"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 587<span style="color: rgba(0, 0, 0, 1)">
},
</span>"SendinBlue"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp-relay.sendinblue.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 587<span style="color: rgba(0, 0, 0, 1)">
},
</span>"SendPulse"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp-pulse.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"SES"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "email-smtp.us-east-1.amazonaws.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"SES-US-EAST-1"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "email-smtp.us-east-1.amazonaws.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"SES-US-WEST-2"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "email-smtp.us-west-2.amazonaws.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"SES-EU-WEST-1"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "email-smtp.eu-west-1.amazonaws.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"Sparkpost"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"aliases": ["SparkPost", "SparkPost Mail"<span style="color: rgba(0, 0, 0, 1)">],
</span>"domains": ["sparkpost.com"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.sparkpostmail.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 587<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"Tipimail"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.tipimail.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 587<span style="color: rgba(0, 0, 0, 1)">
},
</span>"Yahoo"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"domains": ["yahoo.com"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.mail.yahoo.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"Yandex"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"domains": ["yandex.ru"<span style="color: rgba(0, 0, 0, 1)">],
</span>"host": "smtp.yandex.ru"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"Zoho"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.zoho.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>"authMethod": "LOGIN"<span style="color: rgba(0, 0, 0, 1)">
},
</span>"126"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.126.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"163"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"host": "smtp.163.com"<span style="color: rgba(0, 0, 0, 1)">,
</span>"port": 465<span style="color: rgba(0, 0, 0, 1)">,
</span>"secure": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
}
}</span></pre>
</div>
<p> </p>
<p> </p>
<h2>四、调用</h2>
<p>在调用的地方引入 sendmail 函数,可先收集所有收件人邮箱放进一个数组,再使用 join(',') 把每个邮箱用 ',' 分隔,最后传入sendmail 即可</p>
<div class="cnblogs_code">
<pre>const sendmail = require("../../model/sendmail.js"); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入刚才写好的 sendmail.js</span>
<span style="color: rgba(0, 0, 0, 1)">
let mail </span>= ['111111@qq.com','222222@qq.com','33333@qq.com'].join(',') <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> "111111@qq.com,222222@qq.com,33333@qq.com"</span>
sendmail(mail,'<H1>使用 node 群发邮件~~~</H1><a href="https://www.cnblogs.com/elfpower/p/9323121.html">Node.js - 群发邮件</a>');</pre>
</div>
<p> </p>
<p> </p>
<p> </p>
<h2>五、效果</h2>
<p>QQ 邮箱页面:</p>
<p><img src="https://img2020.cnblogs.com/blog/1356334/202007/1356334-20200727004955824-273565814.png"></p>
<p> </p>
<p>node.js 输出</p>
<p><img src="https://img2020.cnblogs.com/blog/1356334/202007/1356334-20200727010422596-377238384.png"></p>
<p> </p>
<p> </p>
<p> </p>
<h2>六、总结</h2>
<p>非常简单,按照步骤安装->设置->调用,几分钟立即实现功能,后期再按实际需求稍微封装即可。需要注意一点,发送人邮箱记得开通 smtp!!!</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/elfpower/p/9323121.html
頁:
[1]