Perl - Outlook - Включение встроенного изображения в тело письма (HTML) - PullRequest
0 голосов
/ 11 октября 2019

Мне нужно включить изображение в текст письма (используя форматирование HTML), чтобы оно было встроено, а не в качестве дополнительного вложения, использующего библиотеку Win32 :: OLE в Perl, для вызова клиента Outlook, установленного в Windows.

НижеКод работает, но полученное письмо не отображает изображение. Я вижу только маленький квадратный символ, указывающий, что встроенное встроенное изображение отсутствует или повреждено.

#use strict;
use warnings;
use Win32::OLE;

#get new Outlook instance
my $mail = new Win32::OLE('Outlook.Application');
die "Unable to start Outlook instance: $!" if !defined $mail;

my $item = $mail->CreateItem(0);
die "Unable to create mail item: $!" if !defined $item;

$item->{'To'} = 'mypersonalgmailaddress@gmail.com'; 
$item->{'CC'} = '';
$item->{'Subject'} = 'Test for embedded/inline image';
$item->{'BodyFormat'} = 'olFormatHTML'; 
$item->{'HTMLBody'} = "<html><body><img src=\"signature.png\"></body></html>";
$item->save();

#attach an image and make it embedded.
my $attachments = $item->Attachments();
$attachments->Add('C:\signature.png', olEmbeddeditem);

#send it
$item->Send();

my $error = Win32::OLE->LastError();
print STDERR "Win32::OLE error: $error" if $error;

Кто-нибудь знает, что не так с приведенным выше кодом? Любые советы очень ценятся.

1 Ответ

1 голос
/ 11 октября 2019

Вам необходимо прикрепить изображение, а затем установить CID, который вы можете использовать в теле сообщения:

Attachment attachment = newMail.Attachments.Add(@"E:\Pictures\image001.jpg"
    , OlAttachmentType.olEmbeddeditem , null , "Some image display name" );

   string imageCid = "image001.jpg@123";

   attachment.PropertyAccessor.SetProperty(
     "http://schemas.microsoft.com/mapi/proptag/0x3712001E", imageCid);

   newMail.HTMLBody = String.Format("<body><img src=\"cid:{0}\"></body>", imageCid );
...