Email 在Meteor应用程序中发送电子邮件时未替换Sengrid模板替换标记

Email 在Meteor应用程序中发送电子邮件时未替换Sengrid模板替换标记,email,meteor,sendgrid,Email,Meteor,Sendgrid,在Meteor应用程序中,包含了Sendgrid事务电子邮件模板,用于用户邀请和通知,我无法替换替换标记。收到模板电子邮件,但没有任何区别 Email.send({ from: "hello@domain.com", to:email, subject: "Subject", sub: { "{name}":post.createdBy, "{title}":post.title, }, headers: { "

在Meteor应用程序中,包含了Sendgrid事务电子邮件模板,用于用户邀请和通知,我无法替换替换标记。收到模板电子邮件,但没有任何区别

Email.send({
    from: "hello@domain.com",
    to:email,
    subject: "Subject",
    sub: {
      "{name}":post.createdBy,
      "{title}":post.title,
    },
    headers: {
      "X-SMTPAPI": {
        "filters": {
          "templates": {
            "settings": {
              "enable": 1,
              "template_id": "xxxx"
            }
          }
        }
      },
      "Content-Type" : "text/html"
    }
});
我不是直接使用API,而是使用Meteor电子邮件包,但没有发现可能的问题:

Meteor.startup(function () {
  process.env.MAIL_URL = 'smtp://username:password@smtp.sendgrid.net:587';
});
这是我的简短电子邮件模板:

Hey {name},  

  your post {title} has a new comment.

您还需要将
sub
s放入
X-SMTPAPI
标题中。X-SMTPAPI头本身也应该在字符串中包含有效的JSON

试试这个:

var xsmtpapi = {
  "filters": {
    "templates": {
      "settings": {
        "enable": 1,
        "template_id": "xxxx"
      }
    }
  },
  "sub": {
    "{name}": post.createdBy,
    "{title}": post.title
  }
}

Email.send({
    from: "hello@domain.com",
    to:email,
    subject: "Subject",
    sub: {
      "{name}":post.createdBy,
      "{title}":post.title,
    },
    headers: {
      "X-SMTPAPI": JSON.stringify(xsmtpapi),
      "Content-Type" : "text/html"
    }
});

我最终使用的是NPM软件包

简单的例子是:

var nodemailer = require('nodemailer');
var smtpapi    = require('smtpapi');

var header = new smtpapi();

header.setFilters({
    "templates": {
      "settings": {
        "enable": 1,
        "template_id": xxx-template-id-xxx
      }
    }
});

header.addSubstitution('-name-', post.createdBy);
header.addSubstitution(-title-', post.title);

var headers = { 'x-smtpapi': header.jsonString() };

// Use nodemailer to send the email 
var settings  = {
  host: "smtp.sendgrid.net",
  port: parseInt(587, 10),
  requiresAuth: true,
  auth: {
    user: "sendgrid_username",
    pass: "sendgrid_password"
  }
};
var smtpTransport = nodemailer.createTransport(settings);

var mailOptions = {
  from:     "Fred Foo <foo@blurdybloop.com>",
  to:       "bar@blurdybloop.com",
  subject:  "Hello",
  text:     "Hello world",
  html:     "<b>Hello world</b>",
  headers:  headers
}

smtpTransport.sendMail(mailOptions, function(error, response) {
  smtpTransport.close();

  if (error) {
    console.log(error);
  } else {
    console.log("Message sent: " + response.message);
  } 
});
var nodemailer=require('nodemailer');
var smtpapi=要求('smtpapi');
var头=新的smtpapi();
header.setFilters({
“模板”:{
“设置”:{
“启用”:1,
“模板id”:xxx模板id xxx
}
}
});
header.addSubstitution('-name-',post.createdBy);
header.addSubstitution(-title-',post.title);
var headers={'x-smtpapi':header.jsonString()};
//使用nodemailer发送电子邮件
变量设置={
主机:“smtp.sendgrid.net”,
端口:parseInt(587,10),
是的,
认证:{
用户:“sendgrid\u用户名”,
pass:“sendgrid\u密码”
}
};
var smtpTransport=nodeEmailer.createTransport(设置);
var mailpoptions={
发自:“福瑞德”,
至:bar@blurdybloop.com",
主题:“你好”,
文字:“你好,世界”,
html:“你好,世界”,
标题:标题
}
发送邮件(邮件选项,函数(错误,响应){
smtpTransport.close();
如果(错误){
console.log(错误);
}否则{
console.log(“发送的消息:+response.Message”);
} 
});

不幸的是,这不起作用。我只是在用-但是当把潜艇放进X-SMTPAPI的时候,邮件从未被处理过。明白了。您需要将整个JSON对象作为字符串传递。更新了答案。这也没有处理。请求已发出,但未送达。谢谢你迄今为止的帮助!