由于工作需要,经常需要发邮件,每次频繁发送的邮件大部分内容都是相同的,觉得每次打开邮箱编辑写信比较烦。本着 DRY 的原则,为什么不学一下 自动发邮件的nodejs脚本呢?开干。
准备
- nodejs
npm install nodemailer发送邮件的库npm i pug使用pug模板,写email模板
发送邮件脚本
const path = require('path');
const fs = require('fs');
const nodemailer = require("nodemailer");
const pug = require('pug')
const compiledFn = pug.compileFile('email.pug')
const contentHtml = compiledFn({
name: '称呼', // 称呼
content: '邮件文本内容xxxxxxxx',
updateExplain: [
'更新1',
'更新2',
'更新3'
],
cardName: '张三', // 名片名称
jobTitle: '开发工程师' // 职业
})
// async..await is not allowed in global scope, must use a wrapper
async function main() {
// Generate test SMTP service account from ethereal.email
// Only needed if you don't have a real mail account for testing
let testAccount = await nodemailer.createTestAccount();
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
host: "smtp.exmail.qq.com", // 这里用的是 企业微信邮箱,根据实际情况替换
port: 465,
secure: true, // true for 465, false for other ports
auth: {
user: "xxx@nodemailer.com", // generated ethereal user
pass: "xxxxxxxxxxxxx", // generated ethereal password
},
});
let attachmentsFileName = 'youthTourWxmini.tar.gz'
// send mail with defined transport object
let info = await transporter.sendMail({
from: 'Nodemailer <example@nodemailer.com>', // sender address
to: [
'Nodemailer <example@nodemailer.com>'
]// list of receivers
cc: [
'Nodemailer <example@nodemailer.com>'
], // 抄送
bcc: [
], // 密文抄送
subject: '邮件标题', // Subject line
text: "", // plain text body,邮件内容,有html字段会忽略text
attachments: [ // 可选,添加附件
{
filename: attachmentsFileName, // 附件名称
content: fs.createReadStream(path.normalize(`D:/project/${attachmentsFileName}`))
}
],
// html body
html: contentHtml // 邮件内容,html格式
});
console.log("Message sent: %s", info.messageId);
// Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>
// Preview only available when sending through an Ethereal account
console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
// Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
}
main().catch(console.error);
邮件内容 html,这里使用 pug 模板引擎
// email.pug
div
- for(var i = 0; i < 2; i++)
br
// 填写称呼
div #{name}您好:
// 邮件内容
// 更多段落复制 div
div(style="text-indent:2em") #{content}
div(style="text-indent:2em")
if updateExplain.length > 0
div 说明:
ul
for val in updateExplain
li #{val}
div
- for(var i = 0; i < 5; i++)
br
include emailCard.pug
邮箱名片自定义
div.green #{cardName}
div.job #{jobTitle}

1454

被折叠的 条评论
为什么被折叠?



