通过Perl在Outlook HTML电子邮件中包含嵌入的图像

时间:2013-01-09 20:58:33

标签: perl outlook-2007

我需要生成一个嵌入了横幅图片的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()项检查,因为它们都没有失败。)

添加附件时,不会将附件类型设置为olEmbeddeditem(5);不知道这是否与问题有关。

SetProperty也没有设置值。这应该设置HTML中img src中引用的Content ID(cid)。我使用下面的代码来GetProperty,它返回一个空字符串。

my $CIDvalue = $bannerAttachment->PropertyAccessor->GetProperty(
    "http://schemas.microsoft.com/mapi/proptag/0x3712001E");
print ">>>CIDvalue = $CIDvalue\n";

如此接近,我可以尝到它!

1 个答案:

答案 0 :(得分:1)

WIN32::OLE的Perl文档中仔细阅读后发现了一个显然被调用的SetProperty方法,而不是我认为我正在调用的M $。将代码更改为:

$bannerAttachment->PropertyAccessor->Invoke('SetProperty', "http://schemas.microsoft.com/mapi/proptag/0x3712001E", "banner.jpg");

让它发挥作用并且非常高兴:)