2013-01-09 68 views
0

我需要生成嵌入橫幅圖像的HTML電子郵件。它必須經過Outlook2007郵件客戶端。我試圖base64編碼圖像,並把它內聯(它看起來好),但Outlook不會發送電子郵件。我已經通過許多不同的文章(用各種編程語言)剔除了這些,但是它仍然不起作用。此代碼創建電子郵件並附加圖像,但不顯示圖像。通過Perl在Outlook HTML電子郵件中包含嵌入式圖像

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'} = '[email protected]'; 
$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

仔細閱讀Perl文檔WIN32::OLE發現了一個SetProperty方法,顯然是被調用的,而不是我認爲我正在調用的M $。代碼更改爲:

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

使工作和有大喜:)

相關問題