0

バナー画像を埋め込んだHTMLメールを生成する必要があります。Outlook2007メールクライアントを経由する必要があります。画像をbase64encodeしてインラインに入れようとしましたが(見た目は良かったです)、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で参照されるコンテンツID(cid)を設定することになっています。以下のコードを使用してGetPropertyを実行すると、空の文字列が返されます。

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

とても近いので味わえます!

4

1 に答える 1

1

WIN32 :: OLEのPerlドキュメントを注意深く読むと、私が呼び出していると思っていたM$メソッドの代わりに呼び出されているように見えるSetPropertyメソッドが明らかになりました。コードを次のように変更します。

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

それを機能させ、大きな喜びがありました:)

于 2013-01-12T03:27:09.450 に答える