有谁知道如何告诉 Node.js 的模块 nodemailer 使用外部 HTML 文件(带有样式表的链接)作为电子邮件内容?
我可以输入 HTML 标签作为电子邮件内容,但我更喜欢加载完整的 HTML 文件。我正在使用 nodemailer 1.3.0。
不幸的是,对于实际的 nodemailer 版本,我找不到任何涵盖此问题的示例。
想法?
有谁知道如何告诉 Node.js 的模块 nodemailer 使用外部 HTML 文件(带有样式表的链接)作为电子邮件内容?
我可以输入 HTML 标签作为电子邮件内容,但我更喜欢加载完整的 HTML 文件。我正在使用 nodemailer 1.3.0。
不幸的是,对于实际的 nodemailer 版本,我找不到任何涵盖此问题的示例。
想法?
它是一个 node.js 包,允许您内联您的 css,以便您可以使用 nodemailer 发送完整的 HTML 电子邮件。
它还可以在您的电子邮件中添加/更新链接,使它们不再是相对链接。(即,您可以将“ coverage/local.html ”之类的链接更改为“ \myhostname\afolder\coverage\local.html ”
这是一个粗略且现成的脚本,我敲了它以通过电子邮件发送伊斯坦布尔代码覆盖率的输出。
/*
* Use this script to send Istanbul code coverage results via email.
*
* NPM REQUIREMENTS:
* The following packages need to be installed:
* - npm install styliner
* - npm install nodemailer
* - npm install nodemailer-smtp-transport
*
* Usage: node sendNodeJSCoverageEmail.js <origfile> <basedir> <receipient>
*
* <origfile> : This is the original Istanbul index.html from the code coverage report
* <basedir> : TeamCity directory where the index.html resides. Must contain "DevTC" folder (see below)
* <recipient> : Email address to send the results to.
*
* What it does:
* Istanbul creates an html report for code coverage. It is a complete web page, and has an index.html,
* some CSS style sheets, and relative links to other coverage.
*
* This script takes the index.html, reads the referenced .css files, and inlines the css, so that external
* files are no longer needed. (this is because you can't send multiple files for an html email).
* Also, the relative links are prepended with the UNC path to the files: this means that the recipients
* can click on the links in the html email and they will work.
*
* NOTE: it assumes the TeamCity folder where the coverage reports reside is shared, and also contains the
* folder DevTC (it looks for this folder to do the substitution). All build machines have this
* folder structure.
*
*/
var nodemailer = require('nodemailer');
var os = require("os");
var hostname = os.hostname();
var originalFile = process.argv[2].toString();
var baseDir = process.argv[3].toString();
var recipient = process.argv[4].toString();
var Styliner = require('styliner');
var uncDrive = '\\\\' + hostname + '\\DevTC';
var uncPath = baseDir.replace(/.*DevTC/gi, uncDrive);
// prependUNCPath is a function called by Styliner for every
// link that is found in the HTML.
function prependUNCPath(path, type) {
return uncPath + path;
}
// See http://styliner.slaks.net/#about for Styliner options
var options = { url : prependUNCPath, noCSS : true };
var styliner = new Styliner(baseDir, options);
function sendEmail(source) {
var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');
// create reusable transporter object using SMTP transport
var transport = nodemailer.createTransport(smtpTransport({
host: 'your-smtp-server.local', // FIXME: Change this!
port: 25,
}));
// setup e-mail data with unicode symbols
var mailOptions = {
from: 'TeamCity <teamcity@company.com>', // sender address
to: recipient, // list of receivers
subject: 'Code Coverage results', // Subject line
// text: 'Hello world ?', // plaintext body, not used
html: source // html body
};
// send mail with defined transport object
transport.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
} else {
console.log('Message sent: ' + info.response);
}
});
}
var fs = require('fs')
// Do the reading of the original index.html, and kick everything off.
fs.readFile(originalFile, 'utf8', function (err, data) {
if (err) {
return console.log(err);
}
styliner.processHTML(data)
.then(function (source)
{
sendEmail(source);
fs.writeFile("newindex.html", source, function (err) {
if (err) {
return console.log(err);
}
console.log("The file was saved!");
});
}
);
});
您应该使用内联 css,而不是单独的文件,因为 head 元素的 HTML 呈现等是由提供者而不是由 nodemailer 定义的。
我推荐 mailChim 的 css 内联工具,它非常方便,只需设置
html: '<div style="font - family: verdana; max-width:500px; margin-left">' + 'more string and string'
我建议使用fs
模块的readFile
函数来读取您的 HTML 文件,然后在回调中通过电子邮件发送它。
readFile 教程:http://docs.nodejitsu.com/articles/file-system/how-to-read-files-in-nodejs