Портал для веб-мастера
Вход пользователей
Поиск статей
WoWeb.ru » Статьи » Программирование для Web » PERL/CGI

Используем MIME::Lite или Как отправить email с прикрепленными файлами?

Содержание

Введение

Приветствую вас начинающие волшебники...
Именно с этих слов началось мое изучение 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();  

Заключение

Возможно наличие ошибок и опечаток в этой статье. Все мы люди и не застрахованы от неожиданностей. Если таковые будут Вами замечены - сообщите мне, я их обязательно исправлю. Также можете присылать предложения и дополнения касательно данной статьи.
Что либо непонятно? Пишите дополню.

Данная статья основывается на документации CPAN к модулю MIME::Lite.
Автор: Serge Suhov · Добавлена: 2003-09-15
Просмотров: 4138 · Рейтинг: 5.0

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Категории раздела
Flash
Apache
WWW
PhotoShop
Веб-дизайн
Раскрутка и реклама
Базы данных
3D графика
Хостинг
Истории веб-мастеров
Web-технологии
Сетевая безопасность
Программирование для Web
Операционные системы

Новые статьи
Лучшие статьи
Популярные статьи
Комментируемые статьи
Разделы сайта
Скрипты
Статьи
Шрифты
Флэш исходники
HTML шаблоны
Партнерки
Клипарты
Смайлы
Фоны
Гифы
Иконки
Опрос сайта
Есть ли у вас свой сайт?
Всего ответов: 140899
Наша кнопка
WoWeb.ru - портал для веб-мастера