
本文介绍了如何使用 Nodemailer 发送包含 HTML 模板的邮件。通过使用模板字符串和变量插值,您可以动态地生成邮件内容,并将其发送给指定的收件人。文章提供详细的代码示例,并解释了在 Nodemailer 中使用 HTML 模板的关键步骤和注意事项,帮助开发者轻松实现邮件发送功能。
Nodemailer 是一个流行的 Node.js 模块,用于发送电子邮件。它支持多种传输方式,包括 SMTP、Sendmail 和 Amazon SES。 除了发送纯文本邮件,Nodemailer 还允许你发送包含 HTML 内容的邮件,这使得你可以创建更丰富、更具吸引力的邮件。
发送 HTML 邮件
要使用 Nodemailer 发送 HTML 邮件,你需要设置 html 选项,其值为包含 HTML 代码的字符串。例如:
const nodemailer = require('nodemailer');
// 创建一个 transporter 对象
let transporter = nodemailer.createTransport({
host: 'your_smtp_host',
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: 'your_email@example.com',
pass: 'your_email_password'
}
});
// 邮件选项
let mailOptions = {
from: 'your_email@example.com',
to: 'recipient@example.com',
subject: 'Hello from Nodemailer',
html: '<h1>Welcome</h1><p>That was easy!</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/cb6835dc7db1" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">前端免费学习笔记(深入)</a>”;</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/code/11013" title="商易多用户商城"><img
src="https://img.php.cn/upload/webcode/000/000/013/176465880844685.jpg" alt="商易多用户商城" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/code/11013" title="商易多用户商城">商易多用户商城</a>
<p>功能介绍:1. 商品出售包含拍卖模式,一口价模式。2. 全套系统采用淘宝网风格,成熟,简洁大方3. 每个商品支持多张图片上传,可自由设定,满足广大网民的迫切要求4. 商品信息支持 ubb,图文并茂5. 注册用户可参与竞拍,或者拍卖自己的商品6. 拥有会员注册,交易提醒,成交商品确认等邮件发送功能7. 拥有交易双方信用评价的功能,使得交易安全可*,可信度高8. 拥有安全稳定的用户虚拟币平台,可实现商</p>
</div>
<a href="/xiazai/code/11013" title="商易多用户商城" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div>'
};
// 发送邮件
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
});这段代码会发送一封包含标题为 "Welcome" 的 H1 标签和一段文字的 HTML 邮件。
使用模板字符串
直接在 JavaScript 代码中拼接 HTML 字符串可能比较繁琐,特别是当 HTML 结构比较复杂时。这时,可以使用模板字符串来更方便地构建 HTML 内容。模板字符串允许你在字符串中嵌入变量,使代码更具可读性和可维护性。
const nodemailer = require('nodemailer');
// 创建一个 transporter 对象
let transporter = nodemailer.createTransport({
host: 'your_smtp_host',
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: 'your_email@example.com',
pass: 'your_email_password'
}
});
// 假设我们有一些动态数据
const name = 'John Doe';
const email = 'john.doe@example.com';
// 邮件选项
let mailOptions = {
from: 'your_email@example.com',
to: 'recipient@example.com',
subject: 'Hello from Nodemailer',
html: `
<h1>Hello, ${name}!</h1>
<p>Your email address is: ${email}</p>
`
};
// 发送邮件
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
});在这个例子中,我们使用了模板字符串(用反引号 `包裹)来构建 HTML 内容。${name}和${email}` 会被实际的变量值替换。
注意事项
- 安全性: 当从用户输入或其他不可信来源获取数据时,务必对数据进行适当的转义,以防止 HTML 注入攻击。
- HTML 结构: 确保你的 HTML 代码结构正确,并且符合邮件客户端的兼容性要求。 某些 CSS 样式可能无法在所有邮件客户端中正常显示。建议使用内联 CSS 样式,并尽量避免使用复杂的 CSS 布局。
- 测试: 在发送大量邮件之前,务必先进行测试,以确保邮件内容显示正确,并且能够成功送达收件人。
总结
使用 Nodemailer 发送 HTML 邮件非常简单。通过结合模板字符串,可以方便地构建动态的邮件内容。 在使用过程中,需要注意安全性、HTML 结构和兼容性,并进行充分的测试。 通过遵循这些建议,你可以轻松地使用 Nodemailer 发送美观、专业的 HTML 邮件。










