是否可以在openerp中使用电子邮件模板发送内嵌图像?

时间:2012-11-22 06:37:20

标签: openerp

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

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

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

提前感谢!

3 个答案:

答案 0 :(得分:6)

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

1。使用托管图像

图片网址可以是您网站上的公开网址或互联网上的任何图片托管服务:<img src="http://www.example.com/myimage.png">。这与在stackoverflow上嵌入图像时发生的情况非常相似,因为图像首先自动上传到imgur.comimg src属性指的是imgur.com上传图像的URL。< / p>

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

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

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

src标记的img属性可以使用Data URIRFC 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:网址引用其他正文部分的方式。例如,电子邮件中的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_1attachment_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>