Работа с модулем Mail::Sendmail очень проста. Данный модуль отсылает почту при помощи smtp сервера. Вот небольшой пример.
| Код | use Mail::Sendmail;
%mail = ( To => '[email protected]', #кому From => '[email protected]', #от кого Subject => 'Subj', #Субджект 'Content-Type' => 'text/plain; charset=win1251', #Контент, зачем он нужен - потом 'Content-Transfer-Encoding' => '8bit', Message => 'Ура! Работает!', #Само сообщение Smtp => smtp.mail.ru ); #почтовый сервер
sendmail(%mail) or die $Mail::Sendmail::error; #Отправляем
print "OK. Log says:\n", $Mail::Sendmail::log; #Выясняем что получилось |
Итак все просто. Сначала формируем хеш, в который можно закинуть все свойства письма (например можно добавить важность письма для Outgluc'a или название почтовика). Можно В текст написать html
тест, тогда надо заменить text/plain на text/html. Вот еще кой-какие свойства:
| Код | 'X-Mailer' => 'Microsoft Outlook Express 6.00.2600.0000' Date => Mail::Sendmail::time_to_date( time() ) 'X-MSMail-Priority' => 'High'. |
Итак - вот первое письмо. А как же отправлять аттачмент? Так же. Только тип контента меняется на
'Content-Type' => "multipart/mixed; boundary=\"$boundary\" charset=win1251"
$boundary - это разделитель между отдельными частями письма (текст, файл).
$boundary = "====" . time() . "====";
Все письмо, и текст и файл отправляются в виде одного куска текста. Вот как он создается.
| Код | $file = 'file.exe'; #название файла $boundary = '--'.$boundary;
$mail{body} = <<END_OF_BODY; #Начало текста письма $boundary Content-Type: text/html; charset="koi8-r" Content-Transfer-Encoding: 8bit
$message #Текст $boundary Content-Type: application/octet-stream; name="$file" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="$file"
$file_text #файл считаный в переменню в бинарном режиме $boundary--\n END_OF_BODY #Конец текста письма |
файл считывается так:
| Код | open (F, $file) or die "Cannot read $file: $!"; binmode F; undef $/; $file_text = encode_base64(<F>); close F; |
В принципе все. Только не забудьте про кодировки - в различных почтовиках с ними могут быть проблемы. Возможно придется заменить win1251 на koi8-r и/или перекодировать тест. |