2

我正在编写一个脚本,该脚本通过电子邮件将一些格式化的 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 是一个显示语法的示例。

4

2 回答 2

0

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

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

于 2014-10-21T13:26:44.583 回答
0

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

无论如何,为了发送电子邮件,安全地显示附加在电子邮件中的图像,仅使用一些 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 标头的值示例:

参考:

于 2020-11-28T18:34:11.857 回答