2

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

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

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

提前致谢 !

4

3 回答 3

7

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

1.使用托管图像

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

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

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

2.使用Data URI内联图片数据

标记的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 文件编码器”

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

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_2cid

于 2012-11-22T09:56:54.627 回答
1

这可能有用的在 html 电子邮件中嵌入图像

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

于 2012-11-22T08:45:43.530 回答
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>
于 2019-06-16T07:43:26.993 回答