在电子邮件中使用 cid:attachmentID 用于 css 中使用的图像文件的语法是啥

Posted

技术标签:

【中文标题】在电子邮件中使用 cid:attachmentID 用于 css 中使用的图像文件的语法是啥【英文标题】:What is the syntax for using cid:attachmentID in e-mail for image file used in css在电子邮件中使用 cid:attachmentID 用于 css 中使用的图像文件的语法是什么 【发布时间】:2014-09-15 00:28:34 【问题描述】:

我正在编写一个脚本,通过电子邮件将一些格式化的 html 和图像发送给收件人。使用 MIME::Lite,我想出了一种发送 css 文件和它用作附件的图像文件的方法。图像出现在邮件消息的末尾 - 作为附件。以下行似乎有效:

<link href="cid:style.css" rel="stylesheet" type="text/css" />

我的问题是以下几行的语法应该是什么(在文件 style.css 中)?跟随不起作用。

body 
        background-image:url("cid:bgLine.png");
        background-repeat:repeat-x;

此外,如何阻止邮件客户端自行显示图像?我使用的脚本如下:

my $msg = MIME::Lite->new( From =>"from\@company\.com",
                               To => "to\@company\.com",,
                               Subject =>"Action Required",
                               Disposition =>'inline',
                               Type    =>'multipart/related');
$msg->attach(Type => 'text/html', Data => qq@htFileContents);
$msg->attach(Type => 'text/html', Id => $cssFileName, Data => qq@cssFileContents);
$msg->attach(Type => 'image/png', Id => $imageFile, Path => $imageFile);
$msg->send("sendmail","/usr/sbin/sendmail -t");

让邮件客户端从 http 服务器访问 css 或图像文件的 URL 不是一种选择。电子邮件必须是独立的。 TIA 示例显示语法。

【问题讨论】:

【参考方案1】:

标题与上面发布的问题之间没有联系。

无论如何,为了发送电子邮件,安全地显示电子邮件中附加的图像,仅使用一些 cid: URL 来引用图像是不够的。

将图像附加到电子邮件具有以下细节:

将图像的外部 URL 替换为电子邮件中附件的 URL。 要生成的邮件不仅仅是JavaMail默认解释的multipart/mixed,而是MIME multipart/related类型,为了让邮件客户端可以使用图片。 图片的附件必须有 内容配置:内联; filename=... 标头,以便它们不会显示为附件,而是允许电子邮件客户端使用它们。 ContentID:unique-name@domain 标头,其中唯一名称和域必须替换为实际值并保留 ! 示例:ContentId:logo.png@paysafe.com 电子邮件的 HTML 部分(邮件正文)中的引用通过 cid:content-id URL 发生,其中 content-id 是包含图像的附件的 ContentId 标头的值 示例:

参考资料:

https://javaee.github.io/javamail/docs/api/ 用于邮件协议特定的属性。 https://www.rfc-editor.org/rfc/rfc2392 - 定义 CID: URL 架构和 addr-spec 的使用 https://www.rfc-editor.org/rfc/rfc822 - 以如下形式定义 addr-spec:local-part "@" domain https://www.rfc-editor.org/rfc/rfc1806 - 定义 Content-Disposition 标头 https://www.rfc-editor.org/rfc/rfc2387 - MIME 多部分/相关内容类型 - 对图像内联至关重要

【讨论】:

【参考方案2】:

这真的行不通。即使您奇迹般地能够让您的附件看到并相互交谈,Outlook 也不支持背景图像,Gmail 将删除您链接的 css 文件和任何嵌入的 css,并且 hotmail 将不支持 css 背景。

听起来您需要在某个地方托管一个 HTML 电子邮件以接受动态部分,并从您的应用程序中触发发送,将动态部分传递给它以在发送前填写。查看 Lyris Listmanager 之类的工具。

【讨论】:

以上是关于在电子邮件中使用 cid:attachmentID 用于 css 中使用的图像文件的语法是啥的主要内容,如果未能解决你的问题,请参考以下文章

在电子邮件中使用协议相对 URL 是不是安全?

如何在电子邮件或电子邮件模板中使用自定义字体

使用JavaScript在电子邮件中显示电子邮件标题

用于在 Angular 4.x 中使用 nodejs 发送电子邮件的电子邮件服务?

使用 Java 在电子邮件正文中发送图像

无法在多封电子邮件中重复使用电子邮件附件