我必须在 OpenERP 中使用电子邮件模板发送图像,但我必须插入它,就像我们在 gmail、yahoo 和 stackoverflow.com 中都有插入图像的功能一样。
我必须像这样发送图像是因为我希望它应该在打开邮件的同时显示,以及文本。
如果我使用附件发送它,它会包含在附件中,我们可以在下载图像后立即看到。我不需要这个下载选项,我需要的是打开图像。
提前致谢 !
我必须在 OpenERP 中使用电子邮件模板发送图像,但我必须插入它,就像我们在 gmail、yahoo 和 stackoverflow.com 中都有插入图像的功能一样。
我必须像这样发送图像是因为我希望它应该在打开邮件的同时显示,以及文本。
如果我使用附件发送它,它会包含在附件中,我们可以在下载图像后立即看到。我不需要这个下载选项,我需要的是打开图像。
提前致谢 !
在电子邮件中嵌入图像的常用方法有 3 种(按复杂度递增的顺序):使用公共 URL、使用 Data URI 将图像数据内联到src
属性中,以及使用附加到电子邮件的图像。在所有 3 种情况下,您都可以使用常规 HTML 技术将它们包含在 OpenERP 电子邮件模板的 HTML/Rich-Text 正文中:例如使用<img src="..."/>
标签或 CSSbackground-image
属性。只有前两种技术可以在 OpenERP 的电子邮件模板中开箱即用。
图片 URL 可以只是您网站上的公共 URL 或 Internet 上的任何图片托管服务:<img src="http://www.example.com/myimage.png">
. 这与在 stackoverflow 上嵌入图像时发生的情况非常相似,因为图像首先会自动上传到imgur.com,并且img src
属性指的是 imgur.com 上上传图像的 URL。
这是可行的,但现在大多数电子邮件客户端(thunderbird、gmail、outlook ......)都会阻止远程图像,因为它们通常被滥用来检测给定电子邮件被其收件人打开的事实(如果图像被下载,这意味着邮件已打开)。通常,收件人必须单击横幅或警告才能显示这些远程图像。
这是与 OpenERP 的电子邮件模板开箱即用的唯一技术。
标记的src
属性img
可以使用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] :如果你想要一个简单的方法来做转换,谷歌“在线 base64 文件编码器”
RFC 2111cid:
为消息正文部分指定了一种使用URL引用其他正文部分的方法。例如,img src
电子邮件中的属性可以引用其中一个附件。从技术上讲,img
标签可能如下所示:
<img src="cid:some_unique_content_id/>
其中some_unique_content_id
是包含图像的消息部分的 Content-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 中目前不提供此功能,但实施起来并不困难。一种简单的方法是在最终邮件由电子邮件层制作时自动为所有附件(例如attachment_1
,附件。attachment_2
cid
这可能有用的在 html 电子邮件中嵌入图像
虽然我不认为这是一个与 openerp 相关的问题......
以下是我使用 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>