在Meteor中的电子邮件模板中渲染图片

时间:2016-04-08 11:36:39

标签: email templates meteor

我有好的电子邮件模板存储在/ private文件夹中,我在/ public / images文件夹中有一些图片。我有img标签,其中包含使用完整路径(http://localhost:3000/images/image1)或外部链接的模板链接。 我使用

渲染我的模板
SSR.compileTemplate('myTemplate',Assets.getText('myTemplate.html');
renderedTemplate = SSR.render('myTemplate',emailData);
    var dataContext = {
        htmlHead: '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">',
        htmlFoot: '</html>'
    };

然后我用

    finalHtml = dataContext.htmlHead + renderedHtml + dataContext.htmlFoot;
    Email.send({
       from: smtp.login,
       to: email,
       subject: 'News',
       html: finalHtml
    });

然后,当我收到我可爱的邮件时,一切都很好,但是我的附加图像没有加载;这是SSR.compileTemplate的问题吗?通常静态图片应该附在电子邮件的底部(如果我在我的Gmail中查看“show original”),但它们不在那里.. 我做错了什么以及我该如何解决?

2 个答案:

答案 0 :(得分:2)

使用Meteor.absoluteUrl方法是引用图像源的正确方法。但是,我相信即使使用它也会遇到同样的问题。

这是因为您尝试从非公开可访问的网址引用图片。在您的情况下,localhost将成为您图片完整路径中的主机。您的html模板需要将图像引用到特定的uri。在这种情况下,由于它已在您的本地计算机上托管,因此无法使用。

如果您在托管环境中部署应用,则会提供您的主机网址。希望这是有道理的。

答案 1 :(得分:0)

尝试使用Meteor.absoluteUrl,请参阅文档here

可能是这样的:

emailData.absoluteUrl = Meteor.absoluteUrl('/');

然后在你的模板中:

<img src="{{absoluteUrl}}/path-to-your-image.jpg"/>

Haven没有亲自尝试过,所以这是未经测试的。我倾向于直接使用S3资产。