在电子邮件中使用 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 中使用的图像文件的语法是啥的主要内容,如果未能解决你的问题,请参考以下文章