Meteor 电子邮件模板中的动态 URL

Dynamic URL in Meteor Email Template

我是 Meteor 的初学者,我想用 iron:router 向我的应用程序中动态生成的页面发送邀请 link。

Meteor.methods({
  'sendEmail': function(to) {
    this.unblock();

SSR.compileTemplate( 'emailText', Assets.getText( 'html-email.html' ) );

Template.emailText.helpers({
  link:  function () { 
    return Router.current().route.path(this);;
}
});


    Email.send({
      to:to,
      from: 'no-reply@whatever.xyz',
      subject:'xyz wants to invite you ',
      html: SSR.render('emailText')
    });
}})
}

问题是我的 html-email.html 中没有网站的 url。我有

<a href="{{link}}">Link to invitation</a>

我做错了什么?

您的方法是服务器方法 (SSR)。 Router.current() 是客户端方法,不能 return 任何服务器端方法。解决方案是将 url 作为参数传递。以这种方式调用您的方法:

Meteor.call( 'sendEmail', email, url, ... )

那么你的方法将是:

'sendEmail': function( to, url ) {...

看看你的代码,我会说你混淆了服务器端方法和客户端模板助手。

你想达到什么目的?想要将用户在您站点中所在的当前路由包含在邮件中吗?然后,像 fabien 建议的那样,将 url 作为额外参数发送到 sendEmail 方法中。 如果 link 是您用作某个登录页面的 link 的静态路径,我建议从 settings.json.

获取该路径

无论哪种方式,您的问题是呈现一封包含 link 的电子邮件。您可以将对象作为第二个参数传递给 SSR.render。 以下是解决此问题的方法:

Meteor.methods({
  'sendEmail': function(to) {
    this.unblock();

    var linkInMail = 'htpp://some_url/etc?etc'; // Fill this value, see my remark above

    var templateName = 'emailText';
    SSR.compileTemplate(templateName, Assets.getText( 'html-email.html' ) );
    var renderedContent = SSR.render(templateName, {link: linkInMail}); // This your missing part

    Email.send({
      to:to,
      from: 'no-reply@whatever.xyz',
      subject:'xyz wants to invite you ',
      html: renderedContent
    });
}})
}