-
Вебмастеру
(
http://forum.oszone.net/forumdisplay.php?f=22)
Подскажите пожалуйста, как отправить данные полученные из формы по почте.
Скрипт необходим на перле и всё это происходит под виндой НТ.
Спасибо.
|
inche0n |
04-12-2002 15:58 217576 |
|
Мне пару-тройку лет назад пришлось писать почтовый шлюз 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; #конец сессии
|
А вот за это отдельное спасибо, очень помогло.
Вот у меня появилась еще одна проблема:
не удаляется почта на сервере при использовании NET::POP3.
Хотя по описанию должно по окончании сесси удалить помеченные на удаление файлы.
|
у меня письма удалялись так:
Код:
sub to_del {
$pop_del = new Mail::POP3Client(
AUTH_MODE =>'PASS',
USER => $user,
PASSWORD => $pass,
HOST => $host,
) or err(); # или уходим
@a=param("mark"); #это из формы передавались номера помеченных на удаление письма
foreach $delit (@a) { #для каждого
$pop_del->Delete($delit); #удаляем
}
$pop_del->Close() || die $pop->Message(); #закрываем соединение, или отпадаем
sleep(5); #ВРЕМЯ ДЛЯ СЕРВЕРА, ЧТОБЫ СОЕДИНЕНИЕ НОРМАЛЬНО ЗАКРЫЛОСЬ
}
|
Время: 02:05.
© OSzone.net 2001-