Meteor电子邮件模板中的动态网址

时间:2015-12-01 09:45:17

标签: email meteor iron-router

我是Meteor的初学者,我想在我的应用程序中使用iron:router发送一个动态生成页面的邀请链接。

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中获得该网站的网址。我有

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

我做错了什么?

2 个答案:

答案 0 :(得分:0)

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

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

然后你的方法将是:

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

答案 1 :(得分:0)

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

你想要达到什么目的?想要将您网站中用户所在的当前路由包含在邮件中吗?然后,在您的sendEmail方法中将网址作为额外参数发送,例如fabien建议。 如果链接是您用作某个目标网页链接的静态路径,我建议从settings.json获取该路径。

无论哪种方式,您的问题都是呈现包含一些链接的电子邮件。您可以将对象作为第二个参数传递给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
    });
}})
}