我必须使用OpenERP中的电子邮件模板发送图像,但我必须插入它就像我们在gmail,yahoo中有插入图像的功能一样,并且也在stackoverflow.com中.
我必须发送这样的图像是因为我希望它应该在邮件打开的同时显示,以及文本.
如果我使用附件发送它,它会在附件中显示,我们可以在下载图像后看到它们.我不需要这个下载选项,我需要的是打开图像.
提前致谢 !
有三种常见的方法可以在电子邮件中嵌入图像(按复杂程度递增的顺序):使用公共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.
这是有效的,但现在大多数电子邮件客户端(thunderbird,gmail,outlook,...)将阻止远程图像,因为它们通常被滥用来检测给定电子邮件由其收件人打开的事实(如果图像被下载,则意味着邮件已打开).通常,收件人必须单击横幅或警告才能显示这些远程图像.
这是OpenERP电子邮件模板开箱即用的唯一技术.
标记的src属性img可以使用数据URI(RFC 2397)方案来包含内联的图像二进制源.图片标记如下所示:
<img src="data:mime-type;encoding,<encoded_image_data>"/>
Run Code Online (Sandbox Code Playgroud)
对于PNG图像,这可能看起来像这样
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..."/>
Run Code Online (Sandbox Code Playgroud)
您可以将此技术用于OpenERP电子邮件模板,它没有被电子邮件客户端阻止的缺点.但是,您需要手动将图像转换为base64 [A].这也会大大增加模板和外发电子邮件的大小,并且有一些限制(例如,如果您想要最大兼容性,则最多32KB).
[A]:谷歌" 在线base64文件编码器 ",如果你想要一个简单的方法来进行转换
RFC 2111指定了邮件正文部分使用cid:URL 引用其他正文部分的方法.例如,img src电子邮件中的属性可以引用其中一个附件.从技术上讲,img标签可能如下所示:
<img src="cid:some_unique_content_id/>
Run Code Online (Sandbox Code Playgroud)
其中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
Run Code Online (Sandbox Code Playgroud)
此技术也没有被电子邮件客户端阻止的缺点,但实施起来更复杂,因为您需要专门Content-ID为每个附件分配一个,并且在线上发送的最终电子邮件更大,因为它必须包含实际图像.
这在OpenERP中目前不可用,但实现起来并不是很困难.一个平凡的方式是自动分配顺序的内容ID标识的所有附件(例如attachment_1,attachment_2),当最后的邮件通过电子邮件层制作的,也许加入电子邮件模板值生成器助手的选项生成cid的网址,基于附件.