• Страница 1 из 1
  • 1
Используем MIME::Lite или Как отправить email с прикрепленны
otpmДата: Среда, 07.Янв.2009, 00:05 | Сообщение # 1
Admin
Сообщений: 554
« 3 »
Статус: :-(
Введение
Приветствую вас начинающие волшебники...
Именно с этих слов началось мое изучение Perl.
С тех пор я много узнал о Perl'e и теперь сам могу начать свой рассказ именно с этих слов...
Так вот у каждого Perl программиста есть период когда он начинает повышать уровень собственных знаний, а когда это случается он ставит перед собой задачу (по своей воле или по роду деятельности...) примерно такого плана
"Я хочу знать как на Perl'е сделать ..." и если его выбор пал на "отправку email'а с прикрепленными файлами", то эта статья ему просто необходима!

Описание
Я пойду по простому пути, я буду использовать CPAN модуль Mime::Lite и советую вам делать тоже самое.
Объясняю почему. Самому писать декодер для почтовых форматов дело сложное и требует огромного количества времени, а время это самое дорогое что есть у человека! Помните об этом.

Q: А где мне взять этот модуль?
A: Скорее всего он уже установлен на вашем сервере, если его нет, то вы можете его скачать(27kb) и самостоятельно установить. (даже если у вас нет прямого доступа к серверу).

Теперь начнем "подготавливать почву"
Напишите следующую программу:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>";
eval 'use MIME::Lite;';
if ($@ eq ""){print "\n\n<h1>Модуль установлен";exit;}
else {print "\n\n<h1>Модуль не установлен";exit;}

Закачайте ее на сервер и запустите. Если ответ будет Модуль не установлен вам придется: скачать(27kb) модуль, закачать его на сервер в вашу cgi-bin директорию (не придавая атрибуты 755!), и заменять в этой статье строку

use MIME::Lite;
на
require "путь/к/файлу/Lite.pm";
Вот и вся подготовка.

Синтаксис
Синтаксис является стандартным для таких модулей.

## Посылаем один GIF фаил: $msg = MIME::Lite->new( From =>'Ваш@Адрес.com', To =>'Адрес@Получателя.com', Subject =>'Тема сообщения', Type =>'image/gif', Encoding =>'base64', Path =>'file.gif' ); $msg->send();

Давайте по порядку:
$msg = MIME::Lite->new(
Передаем модулю запрос на создание нового сообщения
From =>'Ваш@Адрес.com'
To =>'Адрес@Получателя.com'
Subject =>'Тема сообщения'
Пишем исходные данные
Type =>'image/gif'
Тип отсылаемого сообщения (Говорит мейлеру как читать это сообщение).
Возможные значения:

TEXT - простой форматированный текст
text/html - html документ
image/gif - картинка GIF
image/jpg - картинка JPG
image/png - картинка PNG
multipart/mixed - смешанные типы
multipart/related - смешаные типы, используются для отсылки HTML страниц со "встроенными" картинками
Или упрощенно
"TEXT" - "text/plain"
"BINARY" - "application/octet-stream"

Encoding =>'base64'
Как кодировать сообщение для отправки. Значение по умолчанию можно не использовать...

Path =>'../file.gif'
Местонахождение файла на сервере.

$msg->send();
Послать сообщение.
Бывает двух типов через SMTP или Sendmail...
MIME::Lite->send('smtp', "smtp.mail.ru", Timeout=>60)
MIME::Lite->send("sendmail", "/usr/lib/sendmail -t");

Примеры
А теперь несколько наглядных примеров. Для усвоения материала

Итак предположим вам надо послать текстовое сообщение с двумя файлами внутри

#!/usr/bin/perl #--- Прогрузим модуль: use MIME::Lite; #--- Создадим текстовое сообщение: $msg = MIME::Lite->new( From =>'me@myhost.com', To =>'you@yourhost.com', Cc =>'some@other.com, some@more.com ', Subject =>'Отчеты за год...', Type =>'TEXT', Data =>"Присылаю два отчета\n" Data =>"Один в графическом виде\n" Data =>"Другой находится в архиве" ); #--- Приатачим первый фаил(gif): $msg->attach(Type =>'image/gif', Path =>'files/aaa000123.gif', Filename =>'logo.gif' ); #--- Приатачим второй фаил(zip): $msg->attach(Type =>'application/x-zip-compressed', #Какого типа фаил Path =>'files/lasha.zip', #Местонахождение и название файла Filename =>'super.zip' #Имя файла после отправки ); #--- Отправим используя стандартный sendmail $msg->send();

А теперь другая ситуация: Вы рассылаете рассылку в виде HTML с картинками в самом письме

#!/usr/bin/perl #--- Прогрузим модуль: use MIME::Lite; #--- Создадим текстовое сообщение: $msg = MIME::Lite->new( From =>'me@myhost.com', To =>'you@yourhost.com', Subject =>'HTML with in-line images!', Type =>'multipart/related' ); #--- Первая часть сообщения -html документ $msg->attach(Type => 'text/html', Data => qq{ <html><body> Это <i>мои</i> фотки: <img src="cid:foto1.gif"> <img src="cid:foto2.gif"> </body></html> } #--- Вторая часть сообщения фото #1 $msg->attach(Type => 'image/gif', Id => 'foto1.gif', Path => '/path/to/foto1.gif', ); #--- Третья часть сообщения фото #2 $msg->attach(Type => 'image/gif', Id => 'foto2.gif', Path => '/path/to/foto2.gif', ); #--- Отправим используя стандартный sendmail $msg->send();


Заработок для веб-мастеров
 
  • Страница 1 из 1
  • 1
Поиск:

Счетчик тИЦ и PR