Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Форма по e-mail (http://forum.oszone.net/showthread.php?t=31915)

CBMen 04-12-2002 11:51 217575

Подскажите пожалуйста, как отправить данные полученные из формы по почте.
Скрипт необходим на перле и всё это происходит под виндой НТ.
Спасибо.

inche0n 04-12-2002 15:58 217576

http://cgi.myweb.ru/catalog.phtml?ca...el=3&lang= ищи тут под NT скрипт

CBMen 04-12-2002 17:54 217577

Большое спасибо!

mar 06-12-2002 16:08 217578

Мне пару-тройку лет назад пришлось писать почтовый шлюз 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; #конец сессии


CBMen 06-12-2002 16:20 217579

А вот за это отдельное спасибо, очень помогло.

Вот у меня появилась еще одна проблема:

не удаляется почта на сервере при использовании NET::POP3.

Хотя по описанию должно по окончании сесси удалить помеченные на удаление файлы.

mar 06-12-2002 17:44 217580

у меня письма удалялись так:
Код:

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.

Время: 02:05.
© OSzone.net 2001-