2013-01-09 2 views
0

배너 이미지가 포함 된 HTML 전자 메일을 생성해야합니다. Outlook2007 메일 클라이언트를 통과해야합니다. 내가 base64encode 이미지를 시도하고 그것을 인라인 ( 좋은 보았다)하지만 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(); 

은 (BTW, 나는 그들 중 누구도 어쨌든 실패하지 않기 때문에 게시하기 전에 모든 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

WIN32::OLE에 대한 Perl 문서를주의 깊게 읽으면 내가 부르고 있었던 M $ 대신 분명히 호출 된 SetProperty 메서드가 나타납니다. 에 코드를 변경 :

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

는 일을 만들어 큰 기쁨이 있었다 :)