我想用Email::Stuffer
发送一封电子邮件,并在邮件的html部分引用一个附件图像。为此,我需要图像的MIME部分有一个ID,但我无法让Email::Stuffer
添加一个。
#!perl
use strict;
use warnings;
use Email::Stuffer;
my $stuffer = Email::Stuffer
->from('[email protected]')
->to('[email protected]')
->subject('mcve')
->text_body('see attached image')
->attach_file('image.png');
print $stuffer->as_string(), "\n\n";
my @parts = $stuffer->email->subparts;
my $attachment = $parts[1];
my %headers = $attachment->header_str_pairs();
print "CID header: ", $headers{'Content-ID'}, "\n\n";
字符串
奇怪的是,它打印的东西看起来像一个内容id,即使它打印的mime结构没有Content-ID
头:
Date: Sat, 28 Oct 2023 10:33:05 -0500
MIME-Version: 1.0
From: [email protected]
To: [email protected]
Subject: mcve
Content-Transfer-Encoding: 7bit
Content-Type: multipart/mixed; boundary=16985071850.4fFe46cEc.181699
--16985071850.4fFe46cEc.181699
Date: Sat, 28 Oct 2023 10:33:05 -0500
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
see attached image=
--16985071850.4fFe46cEc.181699
Date: Sat, 28 Oct 2023 10:33:05 -0500
MIME-Version: 1.0
Content-Type: image/png; name=image.png
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=image.png
(some base64 data here)
--16985071850.4fFe46cEc.181699--
CID header: <16985071854.8a407.181699@perle>
型
如果我在查询内容id头之后打印,这不会有什么区别,所以请求一个并不会神奇地添加它。
当我使用attach_file('image.png', 'Content-ID' => 'my@id');
而不是普通的attach
时,它会向content-type
头部添加一个content-id
属性,如下所示:Content-Type: image/png; content-id=my@id; name=image.png
。
我尝试手动添加一个标题的图像部分
$headers{'Content-ID'} = $cid;
$attachment->header_str_set('Content-ID' => [$cid]);
型
但是当我将电子邮件打印为文本时,Content-ID
标题仍然不显示。
如何让Email::Stuffer
将Content-ID
标头添加到图像部分?
1条答案
按热度按时间mklgxw1f1#
如何让Email::Stuffer将Content-ID头添加到图像部分?
我做了一些调试,下面的修改你的脚本似乎工作:
$stuffer->parts
而不是$stuffer->email->subparts
$attachment->header_set('Content-ID', $cid);
代替$attachment->header_str_set('Content-ID' => [$cid]);
示例:
字符串
输出:
型