帅华君想在自己的个站实现一个功能,就是当用户订阅我的个站或个站的某个板块后,会定期向用户邮箱推送我的个站近期发布的最新资讯,包括文章、音、视频、涂鸦等推送。
POP3/SMTP服务
开启服务
以qq邮箱为例:
登录QQ邮箱 -> 设置 -> 账户 -> 开启POP3/SMTP服务
其它邮箱(如163邮箱等)开启该POP3/SMTP服务的位置大同小异,请各位自行查找。
获取授权码
开启POP3/SMTP服务后,为了安全起见,邮件服务提供商会提醒您获取授权码(通过短信验证等方式获取授权码),此授权码常用于登录第三方邮件收发平台,而我们使用Nodejs实现的邮件发送功能很想第三方邮件发送平台,所以在后续配置我们自己的服务是需要将密码设置为授权码。
获取到授权码后,请保存起来以便后续在配置中使用。
EmailJS库
每当你突发奇想要实现某个功能时,涉及到的技术可以将其凝练为关键词在 npm 与 github 查询,就会搜索到许许多多现成的第三方库或框架,通过研究是否能满足需求及其他顾虑,最终选取搜索结果中最优的哪一个,当然,如果没有满意的,完全可以自己写一个库,发布到npm或者到github开源以造福更多开发者。
emailjs
就是我通过以上脑回路搜索到的一个发送Email的第三方库,觉得它能基本满足我的需求,就直接拿来使用了。
安装
npm install emailjs
功能
- works with SSL and TLS smtp servers
- supports smtp authentication (‘PLAIN’, ‘LOGIN’, ‘CRAM-MD5’, ‘XOAUTH2’)
- emails are queued and the queue is sent asynchronously
- supports sending html emails and emails with multiple attachments (MIME)
- attachments can be added as strings, streams or file paths
- supports utf-8 headers and body
小试牛刀
const email = require('emailjs')
var server = email.server.connect({
user: "1210770273@qq.com", // 开启POP3/SMTP服务的邮箱
password: "...", // 授权码填在这里
host: "smtp.qq.com", // 这里以QQ邮箱为例
ssl: true, // 开启SSL
})
var message = {
from: "<1210770273@qq.com>", // 发送方邮件地址
to: "...", // 接受方邮件地址,多个接收方用英文逗号分隔即可
subject: "填写邮件主题",
text: "这里是纯文本邮件内容",
}
MJML
mjml
库帮助开发者快速生成用于邮件模版的HTML代码,同样可以在npm中搜索到。
安装
npm install mjml
小试牛刀
下方示例代码结合 emailjs
与 mjml
两个库实现了简单的生成HTML模版并发送邮件的功能。
const email = require('emailjs')
const mjml2html = require('mjml')
const path = require('path')
const htmlOutput = mjml2html(`
<mjml>
<mj-body>
<mj-raw>
Hello World!<img src='cid:my-image'>
</mj-raw>
</mj-body>
</mjml>
`, {
keepComments: false,
beautify: false,
minify: true,
})
// 上方mjml模版中img元素的src引用了下方邮件附件
var server = email.server.connect({
user: "...", // 开启POP3/SMTP服务的邮件地址
password: "...", // 授权码填这里
host: "smtp.qq.com", // 以QQ邮件为例
ssl: true, // 开启SSL
})
var message = {
from: "...", // 发送方邮件地址
to: "...", // 接收方邮件地址
subject: "邮件主题",
attachment: [
{
data: htmlOutput.html, // HTML代码
alternative: true
},
{
path: "...", // 图片附件
type: "image/jpg", // 附件MIME类型
headers: {
"Content-ID": "<my-image>" // 在HTML代码中绑定图片元素src属性
},
],
}
server.send(message, (err, message) => {
console.log(err || message)
})
本文介绍如何开启POP3/SMTP服务并取得授权码。随后介绍emailjs库的基本使用方法,您还可以从npm中搜索其它适用于Nodejs服务环境下发送邮件的第三方库。最后结合第三方邮件模版解析库mjml发送一封包含自定义HTML内容的邮件,此外还介绍了在邮件中插入富媒体的方法。
本文完,感谢阅读