Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Форма по e-mail
Показать сообщение отдельно
mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


Мне пару-тройку лет назад пришлось писать почтовый шлюз HTTP-SMTP/POP3
вот Perl-овый кусок работы с почтовым сервером по протоколу SMTP
Поскольку работаем по протоколу, не используя почтовую программу, то идет и на UNIX, и под NT

$mess - переменная, в которую помещено сообщение
остальное, откоментировано, а названия переменных по-моему, понятны и так

Код: Выделить весь код
 
use CGI qw(:standard); # используем модуль CGI
use MIME::Base64 qw(encode_base64); # модуль mime на случай этэчмента (если нет - не надо)
use Net::SMTP; # модуль работы по протоколу SMTP

# соединяемся с сервером по SMTP
$smtp = Net::SMTP->new('smth.com', 
                           Hello => 'localhost',
                            #Hello => 'smth.com',
                          );
$smtp->_MAIL("from: $from"); # это пошел пролтокол SMTP
$smtp->data(); # хотим переслать данные
$smtp->datasend("To: $to_\n"); # кому
$smtp->datasend("From: $from\n"); # от кого
$smtp->datasend("Subject: $subject\n"); # subject
$smtp->datasend("My mailer\n"); # а это название твоего мэйлера
$smtp->datasend("MIME-Version: 1.0\n"); # версия mime
$smtp->datasend("Content-Transfer-Encoding: 8bit\n"); # для нас - так 7 бит
if (length($atname) > 3) { # это на случай этэчмента - если он имеется
$smtp->datasend("Content-Type: multipart/mixed; boundary=\"My_Boundary\"\n\n");
} else { # если без всяких этачей
 $smtp->datasend("Content-Type: text/plain; charset=\"koi8-r\"\n\n");
}

if (param("attach")) { # это на случай этэчмента - если он имеется
$smtp->datasend("This is a multi-part message in MIME format.\n\n");
 $smtp->datasend("--My_Boundary\n");
 $smtp->datasend("Content-Type: text\/plain\n\n");
}

$smtp->datasend(param("mess")); # пересылаем сообщение

if (param("attach")) { # это на случай этэчмента - если он имеется
 $smtp->datasend("--My_Boundary\n");
 $smtp->datasend("Content-Type: application/octet-stream; name=\"$atname\"\n");
 $smtp->datasend("Content-Disposition: attachment; filename=\"$atname\"\n");
 $smtp->datasend("Content-Transfer-Encoding: base64\n\n");
 while (read(param("attach"), $buf, 60*57)) {
   $smtp->datasend(encode_base64($buf));
 }
 $smtp->datasend("\n\n--My_Boundary--\n\n");
}

$smtp->dataend(); # конец пересылки данных (по протоколу SMTP идет \n.\n) 
$smtp->quit; #конец сессии

Отправлено: 16:08, 06-12-2002 | #4

Название темы: Форма по e-mail