我必须在OpenERP中使用电子邮件模板发送图像,但我必须插入它就像我们在gmail,yahoo中有插入图像的功能一样,并且也在stackoverflow.com中。
我必须发送这样的图像是因为我希望它应该在邮件打开的同时显示,以及文本。
如果我使用附件发送它,它会在附件中显示,我们可以在下载图像后看到它们。我不需要这个下载选项,我需要的是打开图像。
提前感谢!
答案 0 :(得分:6)
在电子邮件中嵌入图像有三种常用方法(按复杂程度递增顺序):使用公共URL,使用数据URI内联src
属性中的图像数据,并使用附加到电子邮件的图像。
在所有3种情况下,您都可以使用常规HTML技术将它们包含在OpenERP电子邮件模板的HTML / Rich-Text主体中:例如,使用<img src="..."/>
标记或CSS background-image
属性。
只有前两种技术才能在OpenERP的电子邮件模板中开箱即用。
图片网址可以是您网站上的公开网址或互联网上的任何图片托管服务:<img src="http://www.example.com/myimage.png">
。这与在stackoverflow上嵌入图像时发生的情况非常相似,因为图像首先自动上传到imgur.com,img src
属性指的是imgur.com上传图像的URL。< / p>
这有效,但现在大多数电子邮件客户端(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] :Google“online base64 file encoder”如果您想要一种简单的方式进行转换
RFC 2111指定邮件正文部分使用cid:
网址引用其他正文部分的方式。例如,电子邮件中的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中目前不可用,但实现起来并不是很困难。一个简单的方法是在最终邮件为crafted by the email layer时自动为所有附件(例如attachment_1
,attachment_2
)分配顺序Content-ID标识符,并可能在电子邮件模板中添加一个选项Value Builder助手为附件生成基于cid
的网址。
答案 1 :(得分:1)
这可能有用embedding image in html email
虽然我不认为这是与openerp相关的问题......
答案 2 :(得分:0)
这是我使用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>