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-сообщение пересылается на почтовый сервер через сокет, но это мне кажется идеологически неверным :)