我需要生成嵌入横幅图像的 HTML 电子邮件。它必须通过 Outlook2007 邮件客户端。我尝试对图像进行 base64 编码并将其内联(看起来不错),但 Outlook 不会发送电子邮件。我已经挑选了许多不同的文章(使用各种编程语言),这些文章让我走到了这一步,但它仍然不起作用。此代码创建电子邮件并附加图像,但不显示图像。
use Win32::OLE;
use Win32::OLE::Const 'Microsoft Outlook';
my $oMailer = new Win32::OLE('Outlook.Application') or
die "Unable to start an Outlook instance: $!\n";
my $oEmail = $oMailer->CreateItem(0) or
die "Unable to create mail item: $!\n";
$oEmail->{'To'} = 'me@here.org';
$oEmail->{'Subject'} = "Embedded image test";
$oEmail->{'BodyFormat'} = olFormatHTML;
$oEmail->{'HTMLBody'} = "<html><body><img src=\"cid:banner.jpg\"></body></html>";
my $attachments = $oEmail->Attachments();
my $bannerAttachment = $attachments->Add('C:/test/banner.jpg', olEmbeddeditem);
$bannerAttachment->PropertyAccessor->SetProperty(
"http://schemas.microsoft.com/mapi/proptag/0x3712001E", "banner.jpg");
$oEmail->save();
(顺便说一句,我在发布之前删除了所有Win32::OLE->LastError()
支票,因为它们都没有失败。)
添加附件时,不设置附件Type为olEmbeddeditem(5);不知道这是否与问题有关。
SetProperty 也不设置值。这应该设置在 HTML 中的 img src 中引用的内容 ID (cid)。我将以下代码用于 GetProperty,它返回一个空字符串。
my $CIDvalue = $bannerAttachment->PropertyAccessor->GetProperty(
"http://schemas.microsoft.com/mapi/proptag/0x3712001E");
print ">>>CIDvalue = $CIDvalue\n";
这么近,我可以尝到它!