【问题标题】:Rendering pictures in email's template in Meteor在 Meteor 的电子邮件模板中渲染图片
【发布时间】:2016-07-29 15:47:53
【问题描述】:

我有一个很好的电子邮件模板存储在 /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 中查看“显示原件”),但它们不存在.. 我做错了什么以及应该如何解决?

【问题讨论】:

    标签: email templates meteor


    【解决方案1】:

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

    可能是这样的:

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

    然后在你的模板中:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 太棒了!让我知道进展如何,如果一切顺利,请投票并标记为已回答!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      相关资源
      最近更新 更多