我有好的电子邮件模板存储在/ 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”),但它们不在那里.. 我做错了什么以及我该如何解决?
答案 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资产。