【问题标题】:Is it possible to send inline image using email template in openerp?是否可以在 openerp 中使用电子邮件模板发送内联图像?
【发布时间】:2012-11-10 12:30:38
【问题描述】:

我必须在 OpenERP 中使用电子邮件模板发送图像,但我必须插入它,就像我们在 gmail、yahoo 和 stackoverflow.com 中都有插入图像的功能一样。

我必须发送这样的图像是因为我希望它应该在打开邮件的同时显示,以及文本。

如果我使用附件发送它,它会包含在附件中,我们可以在下载图像后立即看到。我不需要这个下载选项,我需要的是打开图像。

提前致谢!

【问题讨论】:

    标签: openerp


    【解决方案1】:

    以下是我使用 Odoo 11 在我的销售订单电子邮件模板中添加公司徽标的方法:

    <p>
    % set company = object.company_id or ctx.get('company')
    % if company.logo:
    % set field_value = '%s' % company.logo
    % set company_logo_base64 = 'data:image/*;base64,%s' % field_value[2:-1]
    % endif
    <img t-if="company_logo_base64" src="${company_logo_base64}">
    </p>
    

    【讨论】:

      【解决方案2】:

      在电子邮件中嵌入图像的常用方法有 3 种(按复杂度递增的顺序):使用公共 URL、使用数据 URI 将图像数据内联到 src 属性中,以及使用电子邮件附加的图像。 在所有 3 种情况下,您都可以使用常规 HTML 技术将它们包含在 OpenERP 电子邮件模板的 HTML/Rich-Text 正文中:例如使用 &lt;img src="..."/&gt; 标签或 CSS background-image 属性。 只有前两种技术可以在 OpenERP 的电子邮件模板中开箱即用。

      1。使用托管图像

      图片 URL 可以只是您网站上的公共 URL 或 Internet 上的任何图片托管服务:&lt;img src="http://www.example.com/myimage.png"&gt;。这与在 stackoverflow 上嵌入图像时发生的情况非常相似,因为图像首先会自动上传到 imgur.com,而img src 属性指的是 imgur.com 上上传图像的 URL。

      这可行,但现在大多数电子邮件客户端(thunderbird、gmail、outlook 等)都会阻止远程图像,因为它们通常被滥用来检测给定电子邮件已被收件人打开的事实(如果图像已下载) ,表示邮件已打开)。通常,收件人必须单击横幅或警告才能显示这些远程图像。

      这是与 OpenERP 的电子邮件模板开箱即用的唯一技术。

      2。使用 Data URI 内联图像数据

      img 标记的src 属性可以使用Data URI (RFC 2397) 方案来内联包含图像二进制源。图片标签如下所示:

      <img src="data:mime-type;encoding,<encoded_image_data>"/>
      

      对于 PNG 图像,这可能看起来像这样

      <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..."/>
      

      您可以将此技术用于 OpenERP 电子邮件模板,并且它没有被电子邮件客户端阻止的缺点。但是,您需要手动将图像转换为 base64[A]。这也将大大增加您的模板和外发电子邮件的大小,并且有一些限制(例如,如果您想要最大的兼容性,最大 32KB)。

      [A]:如果您想要一种简单的转换方式,请使用 Google“online base64 file encoder

      3。使用附加图像(OpenERP 目前不支持)

      RFC 2111 指定消息正文部分使用cid: URL 引用其他正文部分的方式。例如,电子邮件中的img src 属性可以引用其中一个附件。从技术上讲,img 标签可能如下所示:

      <img src="cid:some_unique_content_id/>
      

      其中some_unique_content_id 是包含图像的消息部分的内容ID。这是最终(原始)电子邮件中的样子:

      ------=_NextPart_WHATEVER_ID
      Content-Type: image/jpeg;
          name="image.jpg"
      Content-Transfer-Encoding: base64
      Content-ID: <some_unique_content_id>
      Content-Disposition: inline;
          filename="image.jpg"
      
      /9j/4AAQ...continuation_of_the_base64_encoded_image
      

      此技术也没有被电子邮件客户端阻止的缺点,但实施起来更复杂,因为您需要为每个附件专门分配一个Content-ID,并且通过网络发送的最终电子邮件是更大,因为它必须包含实际图像。

      OpenERP 中目前不提供此功能,但实施起来不会很困难。一种简单的方法是在最终邮件为crafted by the email layer 时自动为所有附件(例如attachment_1attachment_2)分配连续的Content-ID 标识符,并且可能在电子邮件模板Value Builder 助手中添加一个选项以生成@附件的基于 987654347@ 的 URL。

      【讨论】:

      • 非常感谢,但是 OpenERP 模块中有很多关于电子邮件的内容,没有找到自定义的地方,如何测试?
      • @user1791935:我不确定您要自定义什么:代码还是一些测试模板?您应该从使用我提到的前两种技术开始,然后使用模板来使用它(无需更改代码)。例如,在CRM Lead 上创建一个测试模板并使用“预览”按钮对其进行预览(选择要呈现的示例线索)。然后继续 Lead 记录,并在 Communication&History 选项卡中使用“Send New Email”按钮打开合成向导。将有一个使用模板的选项:只需选择您创建的测试模板并向自己发送一封测试邮件。你是这个意思吗?
      • odony:这只是发送带有一些附件的文本电子邮件的一种方式。我想使用 标签发送内联图像就像你说的 jpeg 使用这个标签: "/> 你认为它有效吗?好吧,它对我不起作用。
      • @user1791935:我描述的所有技术都解释了如何发送 inline 图像,真的。附件技术 (3) 也是一种发送 inline 图像的方法。仔细阅读,如果您有不明白的地方,请告诉我。如果您尝试了一些不起作用的方法,请使用您尝试过的实际代码完成您的问题,以便我们详细说明。
      • 我试过: 使用附件链接附加了一个文件,其中“some_unique_content_id”是附件的确切名称。但是在收到邮件时我得到了 和附件中的图片 :(
      【解决方案3】:

      这可能有用embedding image in html email

      虽然我不认为这是一个与 openerp 相关的问题...

      【讨论】:

        猜你喜欢
        • 2011-07-26
        • 1970-01-01
        • 2020-05-05
        • 2013-08-12
        • 1970-01-01
        • 2017-11-15
        • 2011-06-08
        • 2015-06-08
        • 2017-05-05
        相关资源
        最近更新 更多