使用 node.js、node mailer 和 nodemailer-mailgun-transport 发送模板化电子邮件
Posted
技术标签:
【中文标题】使用 node.js、node mailer 和 nodemailer-mailgun-transport 发送模板化电子邮件【英文标题】:Sending Templated emails with node.js, node mailer and nodemailer-mailgun-transport 【发布时间】:2015-10-10 14:00:45 【问题描述】:我有以下基本的 nodejs 应用程序:
var nodemailer = require('nodemailer');
var hbs = require('nodemailer-express-handlebars');
var options =
viewEngine:
extname: '.hbs',
layoutsDir: 'views/email/',
defaultLayout : 'template',
partialsDir : 'views/partials/'
,
viewPath: 'views/email/',
extName: '.hbs'
;
var mg = require('nodemailer-mailgun-transport');
var auth =
auth:
api_key: ' mailgun api key ',
domain: ' mailgun email domain '
var mailer = nodemailer.createTransport(mg(auth));
mailer.use('compile', hbs(options));
mailer.sendMail(
from: 'test@inventori.io',
to: 'test@test.com',
subject: 'Any Subject',
template: 'email.body',
context:
variable1 : 'value1',
variable2 : 'value2'
, function (error, response)
// console.error(error);
if (error)
throw error;
;
console.log('mail sent to ',response);
mailer.close();
);
views/email/template.hbs
>email/head
<body>
>email/header
body
>email/footer
</body>
</html>
views/email/email.body.hbs
<h4>Main Body Here</h4>
variable1 <br/>
variable2
views/partials/email/header.hbs
<h4>Header Content</h4>
views/partials/email/footer.hbs
<h4>Footer Content</h4>
handlebars 模板引擎给出零错误,但 mailgun 传输抛出以下错误:
Error: Sorry: template parameter is not supported yet. Check back soon!
at IncomingMessage.<anonymous> (~/test/node_modules/nodemailer-mailgun-transport/node_modules/mailgun-js/lib/request.js:228:15)
at IncomingMessage.emit (events.js:129:20)
at _stream_readable.js:908:16
at process._tickCallback (node.js:355:11)
此示例使用 gmail 节点邮件传输:
http://excellencenodejsblog.com/express-nodemailer-sending-mails/
我希望能够使用 mailgun 发送模板电子邮件。
任何帮助将不胜感激。
谢谢。
【问题讨论】:
【参考方案1】:对我来说,模板无法正确呈现,因为我在使用 extName
的示例中进行操作,而键实际上是 extname
(全部小写)。也许它被重命名为超时,我正在看的指南现在有点过时了。
下面的完整工作示例截至 2020 年 5 月 30 日。
目录结构:
root/
src/
email-templates/
layouts/
blank.hbs
partials/
hello.hbs
services/
email.service.ts
email.service.ts(尚未更新此以使用正确的类型。只是一个 poc。)
export async function sendTestEmail()
try
// Generate test SMTP service account from ethereal.email
// Only needed if you don't have a real mail account for testing
const testAccount = await nodemailer.createTestAccount()
// create reusable transporter object using the default SMTP transport
const transporter = nodemailer.createTransport(
host: 'smtp.ethereal.email',
port: 587,
secure: false, // true for 465, false for other ports
auth:
user: testAccount.user, // generated ethereal user
pass: testAccount.pass, // generated ethereal password
,
)
transporter.use('compile', hbs(
viewEngine:
extname: '.hbs', // handlebars extension
partialsDir: 'src/email-templates',
layoutsDir: 'src/email-templates/layouts',
defaultLayout: 'blank',
,
viewPath: 'src/email-templates',
extName: '.hbs'
))
// send mail with defined transport object
const mailOptions =
from: 'test@gmail.com', // sender address
to: 'test@gmail.com', // list of receivers
subject: 'Hello ✔', // Subject line
text: 'Hello world?', // plain text body
template: 'hello',
context:
firstName: 'Clem'
const info = await transporter.sendMail(mailOptions)
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...
catch (error)
console.log(error)
【讨论】:
我有完全相同的代码,当我使用text
而不是template
时发送电子邮件,但使用template
我在Mailgun "description": "Failed to render template",
上收到以下错误
你救了我!哥们,我很感谢你的这篇文章。 viewEngine 对象中的 extName 是它对我不起作用的原因。【参考方案2】:
将您的 template
参数更改为 html
。
如果您查看source code here,错误是正确的——没有template
参数之类的东西。
【讨论】:
这里的链接无效 看起来 nodemailer-mailgun-transport API 已更新 github.com/orliesaurus/nodemailer-mailgun-transport/blob/master/… 并且现在似乎接受template
参数。也许你可以试试看。以上是关于使用 node.js、node mailer 和 nodemailer-mailgun-transport 发送模板化电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 node.js 和 node-xmpp 连接到 GTalk