[PERL] Использование модуля MIME::Entity вместо MIME::Lite

sourcerer
Дата: 17.08.2006 12:45:59
Возникла необходимость переписать скрипт используя MIME::Entity вместо MIME::Lite. Я не могу найти где там указывать mailserver в явном виде (такая необходимость возникла в том числе из-за того что скрипт будет выполняться как под Солярисом так и под Виндой, из-за чего переменные ENV использовать не представляется возможным). В MIME::Lite все просто и ясно (вызываем метод класса):

MIME::Lite->send('smtp', $mail_server, Timeout=>60);

а для MIME::Entity как ? И еще, увы но MIME::Lite не полностью поддерживает спецификацию заголовков электронной почты, например если указать Vasya Pupkin <vasya@pupkin.ru>, то сообщение никуда не отправиться...думаю,что MIME:: Entity поможет решить эту проблему :)


Спасибо.
g613
Дата: 17.08.2006 16:54:19
...не видел MIME::Entity, но если уж он так хочет переменные окружения, то почему не выставить их в том же перловом скрипте.... ???

$ENV{....} = 'mail.server';
sourcerer
Дата: 23.08.2006 13:07:22
может кому пригодится...

решил проблему: почтовый сервер объявляем при инициализации объекта класса Net::SMTP, формируем MIME-сообщение объекта класса
MIME::Entity и представляем его в виде строки посредством метода stringify:

my $msg = MIME::Entity->build( From => "$Sender",
To => "$h->{'To'}",
Subject => "My subject",
Type => 'multipart/mixed' );

$msg->attach(Type => 'text/plain',
Encoding => '8bit',
Data => \@msgAr); # ссылка на массив с текстом сообщения
}
$msg->attach(Type => 'application/*',
Encoding => 'base64',
Path => $path_to_attach_file);

$mimeStr = $msg->stringify;

затем пересылаем через метод data объекта класса Net::SMTP:

my $success = $smtp->data([ $mimeStr ]);

также видел работающий вариант, когда подобным же образом сформированное MIME-сообщение пересылается на почтовый сервер через сокет, но это мне кажется идеологически неверным :)