【node】发送邮件及附件简要使用说明
Nodemailer是一个用于Node.js应用程序的模块,可以轻松发送电子邮件。该项目始于2010年,当时没有合理的选项来发送电子邮件消息,如今它是大多数Node.js用户默认选择的解决方案。
一、环境配置
安装模块:nodemailer
npm i nodemailer --save
二、邮箱服务配置如下:
let transporter = nodemailer.createTransport({
host: 'smtp.qq.com',
port: 465,
secure: true,
auth: {
user: '**********',
pass: 'your-password'
}
});
邮箱服务提供商的要求,配置SMTP服务器的主机名、端口号和安全选项等细则如下:
host:网易邮箱 | QQ 的SMTP服务器地址
port:端口,如果 secure 为 true,则端口为 465
secure:安全连接
auth:邮箱认证
user:发送方邮箱的账号
pass:邮箱授权密码
另还有下面这样指定的服务器的
var transporter = nodemailer.createTransport({
service: 'QQ',
auth: {
user: '944xxxx69@qq.com',//发送者邮箱
pass: 'czboxxxxxqvmbebd' //邮箱第三方登录授权码
},
logger: bunyan.createLogger({
name: 'nodemailer'
}),//打印日志
debug: true
});
service:指定邮件服务商,如“QQ”、“gmail”
三、邮件发送配置
const mailOptions = {
from: 'youremail@163.com', // 你的邮箱
to: 'test@163.com', // 接收者,可以同时发送多个,以逗号隔开
cc:'xx@example.com',
subject: '邮件测试',
text: '这是一封来自 Node.js 的邮件测试。', // 邮件文本
html: `<h1>this is en email from nodemailer</h1>`, // 邮件支持 html,但是和 text 冲突,后者会覆盖掉前者,只能选其一
// Apple Watch specific HTML body 苹果手表指定HTML格式
watchHtml: '<b>Hello</b> to myself',
attachments: [ // 上传附件的格式,path 为相对路径
{ // utf-8 string as an attachment
filename: 'text1.txt',
content: 'hello world!'
},
{ // binary buffer as an attachment
filename: 'text2.txt',
content: new Buffer('hello world!','utf-8')
},
{ // file on disk as an attachment
filename: 'text3.txt',
path: '/path/to/file.txt' // stream this file
},
{ // filename and content type is derived from path
path: '/path/to/file.txt'
},
{ // stream as an attachment
filename: 'text4.txt',
content: fs.createReadStream('file.txt')
},
{ // define custom content type for the attachment
filename: 'text.bin',
content: 'hello world!',
contentType: 'text/plain'
},
{ // use URL as an attachment
filename: 'license.txt',
path: 'https://raw.github.com/nodemailer/nodemailer/master/LICENSE'
},
{ // encoded string as an attachment
filename: 'text1.txt',
content: 'aGVsbG8gd29ybGQh',
encoding: 'base64'
},
{ // data uri as an attachment
path: 'data:text/plain;base64,aGVsbG8gd29ybGQ='
},
{
// use pregenerated MIME node
raw: 'Content-Type: text/plain\r\n' +
'Content-Disposition: attachment;\r\n' +
'\r\n' +
'Hello world!'
}
],
};
from :发件人的电子邮件地址。电子邮件地址可以是简单的 'sender@server.com' 或格式化的 '“发件人姓名” sender@server.com',详细信息请参见地址对象
to :以逗号分隔的收件人电子邮件地址列表或数组,将显示在“收件人”字段中
cc :以逗号分隔的抄送人电子邮件地址列表或数组,将显示在“抄送”字段中。
bcc:以逗号分隔的密送人电子邮件地址列表或数组,将显示在“密送”字段中
subject :邮件的主题
text :作为Unicode字符串、缓冲区、流或类似附件的对象的纯文本版本消息
html :作为Unicode字符串、缓冲区、流或类似附件的对象的HTML版本消息,但是和 text 冲突,后者会覆盖掉前者,只能选其一
watchHtml :适用于Apple Watch的特定HTML版本的消息。最新的手表可以正常渲染text/html内容,因此收件人可能永远不会看到watchHtml
amp : 适用于AMP4EMAIL的特定HTML版本的消息,与text和html的使用方式相同。有关使用方法,请参见下面的AMP示例,或参阅此博文以了解发送和渲染的更多信息
attachments:附件对象的数组(有关详细信息,请参见“使用附件”)。附件还可用于嵌入图像
filename: 附件的文件名,可以使用Unicode字符
content:附件的内容,可以是字符串、缓冲区或流
contentType:附件的可选内容类型,如果未设置,将从文件名属性中推导出来
cid: 用于在HTML消息源中使用内联图像的可选内容ID
path:附件的文件路径,如果希望流式传输文件而不是包含在附件中(适用于较大的附件)
href:文件的URL(也可以是data URI)
httpHeaders :与href请求一起传递的可选HTTP头,例如 {authorization: "bearer ..."}
contentDisposition : 附件的可选内容展示类型,默认为“attachment”
encoding -:如果设置并且内容是字符串,则使用指定的编码将内容编码为缓冲区。示例值:“base64”、“hex”、“binary”等。如果要在JSON格式的电子邮件对象中使用二进制附件,这很有用
headers : 附件节点的自定义标头。与消息标头的使用方式相同
raw : 是一个可选的特殊值,用于覆盖当前MIME节点的全部内容,包括MIME标头。如果要自己准备节点内容,这很有用。 可以添加任意数量的附件
另其他选项:
sender - 发件人的电子邮件地址,将显示在“发件人”字段中(如果不确定使用哪个,请始终优先使用“from”)
replyTo - 将显示在“回复”字段中的电子邮件地址
inReplyTo - 此邮件所回复的消息的Message-ID
references - Message-ID列表(数组或以空格分隔的字符串)
envelope - 可选的SMTP信封,如果自动生成的信封不合适(有关详细信息,请参见SMTP信封)
attachDataUrls - 如果为true,则将此消息的HTML内容中的data:图像转换为嵌入的附件
3.1、标题邮件地址对象设置
{
name: 'Майлер, Ноде',
address: 'foobar@example.com'
}
...,
to: 'foobar@example.com, "Ноде Майлер" <bar@example.com>, "Name, User" <baz@example.com>',
cc: [
'foobar@example.com',
'"Ноде Майлер" <bar@example.com>,
"Name, User" <baz@example.com>'
],
bcc: [
'foobar@example.com',
{
name: 'Майлер, Ноде',
address: 'foobar@example.com'
}
]
...
四、发送邮件
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent');
}
transporter.close();
});
五、参考地址:
好用的开发工具推荐
历时一年半多开发终于smartApi-v1.0.0版本在2023-09-15晚十点正式上线
smartApi是一款对标国外的postman的api调试开发工具,由于开发人力就作者一个所以人力有限,因此v1.0.0版本功能进行精简,大功能项有:
- api参数填写
- api请求响应数据展示
- PDF形式的分享文档
- Mock本地化解决方案
- api列表数据本地化处理
- 再加上UI方面的打磨
为了更好服务大家把之前的公众号和软件激活结合,如有疑问请大家反馈到公众号即可,下个版本30%以上的更新会来自公众号的反馈。
嗯!先解释不上服务端原因,API调试工具的绝大多数时候就是一个数据模型、数据处理、数据模型理解共识的问题解决工具,所以作者结合自己十多年开发使用的一些痛点来打造的,再加上服务端开发一般是面向企业的,作者目前没有精力和时间去打造企业服务。再加上没有资金投入所以服务端开发会滞后,至于什么时候会进行开发,这个要看募资情况和用户反馈综合考虑。虽然目前国内有些比较知名的api工具了,但作者使用后还是觉得和实际使用场景不符。如果有相关吐槽也可以在作者的公众号里反馈蛤!