Главная
К библиотеке

Как отправить письмо со странички (или практическое применение PERL-скриптов - 2)

Интернет все сильнее входит в нашу жизнь заставляя владельцев страничек глубже изучать язык гипертекстовой разметки (HTML) и все чаще прибегать к использованию скриптов. И не красоты ради, а в первую очередь, чтобы облегчить жизнь посетителям и владельцам.

Скрипты принципиально делятся на два типа. Первые исполняются на сервере в интернете, вторые у пользователя. К первой группе относятся скрипты написанные на Перл. Ко второй - на JavaScript.

Оба типа имеют свои преимущества и недостатки. К примеру использование JavaScript может быть запрещено пользователем в настройках браузера. И он "несчастный" не увидет творение рук ваших. Тогда как первые независимы от пользователя, его операционной системы и браузера. Но для своей поддержки требуют более "крутой" сервер. Читай - платный хостинг.

В этой статье речь пойдет о Перл-скриптах. Благо в последнее время их использование разрешено и на многих бесплатных серверах. И Вы сами можете все проверить. Будет решена конкретная задача: отправки письма (e-mail) со странички в интернете.

Блуждая в сети вы наверняка не раз встречали сайты с призывами типа "Порекомендуйте нас друзьям". После такой фразы обычно следует форма с полями для e-mail адресов ваших друзей. Которых, в итоге, вы "осчастливите" рекламой посещенного сайта.

Как это работает?

Отправка писем на Unix-серверах в интернете осуществляется приложением SendMail. Именно его используют листы рассылки новостей сайта.

И чтобы отправить письмо достаточно только сформировать правильный запрос к этой программе. То есть определить адреса получателя и отправителя, тему и текст сообщения. А дальше SendMail все сделает сам.

В простейшем случае на Перл это выглядит так (информация получена с сервера MASTAK.COM):

Отправляется письмо на адрес $email от имени $admin_email тема $subject текст письма в $data (это HTML код в кодировке windows)

#================================
#== Отправить сообщение по E-mail
#================================
my $mail = "/usr/lib/sendmail"; #-- Путь к sendmail

open(SM, "|$mail -t $admin_email") || die "Can`t open sendmail";
print SM "From: $admin_email\n";
print SM "To: $email\n";
print SM "Subject: $subject\n";
print SM "Content-Type: text/html; charset=Windows-1251\n\n";
print SM "$data\n";
close(SM);

Как видите, все очень просто.

Чтобы приметить вышеуказанный код вам необходимо сформировать запрос и передать его скрипту.

Запрос сформируем с помощью формы:

<form method="POST" action="/cgi-bin/mailme.pl">
<p>Ваш e-mail (чтобы Вам ответили):
<input type="text" name="from_email" size="25">
<p>Текст сообщения:
<p><textarea rows="10" name="data_email" cols="50"></textarea>
<p><input type="submit" value="Отправить" name="B1">
<input type="reset" value="Очистить" name="B2">
<input type="hidden" name="subject_email" value="Письмо с web-сервера">
<input type="hidden" name="to_email" value="email@my.server.com"></p>
</form>

Выглядит эта форма примерно так:


Ваш e-mail (чтобы Вам ответили):

Текст сообщения:


Нажав на кнопку "Отправить" пользователь запустит Перл-скрипт ("/cgi-bin/mailme.pl") передав ему данные из формы методом POST. Причем как видимые (введенные посетителем), так и скрытые (type="hidden").

Но это не все. С начала скрипт должен раскодировать полученные данные. И лишь потом принять их к исполнению. Неплохо было бы полученные данные также проверить на корректность. В частности e-mail адрес.

Не вдаваясь в тонкости раскодирования параметров полученных от формы и дополнив код итоговым сообщением для пользователя приведу полный текст Перл-скрипта "mailme.pl" который используется на моем сервере:

#!/usr/bin/perl

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$form{$name} = $value;
}

my $mail = "/usr/sbin/sendmail";
open(SM, "|$mail -t $from_email") || die "Can`t open sendmail";
print SM "From: $form{'from_email'}\n";
print SM "To: $form{'to_email'}\n";
print SM "Subject: $form{'subject_email'}\n";
print SM "Content-Type: text/html; charset=Windows-1251\n\n";
print SM "$form{'data_email'}\n";
close(SM);

print "Content-Type: text/html; charset=Windows-1251\n\n";
print "<CENTER><B>Сообщение отправлено</B></CENTER>";
print "<BR><B>От:</B> ";
print "$form{'from_email'}";
print "<BR><B>Кому:</B> ";
print "$form{'to_email'}";
print "<BR><B>Тема:</B> ";
print "$form{'subject_email'}";
print "<BR><B>Текст сообщения:</B> ";
print "<BR>---===***===---";
print "<BR><I>$form{'data_email'}</I>";
print "<BR>---===***===---";
print "<CENTER>| <a href=\"$ENV{'HTTP_REFERER'}\"><B>НАЗАД</B></a> |</CENTER>";

Первая строка отвечает за расположение Перл на сервере. Далее следует обработчик запроса (полученного от формы). Потом знакомый нам вызов приложения SendMail с передачей ему расшифрованных параметров. А в заключительной части пользователю выводится сообщение о результатах работы скрипта. В отчете отображаются отправитетель, получатель, тема и текст сообщения. И, наконец, ссылка на страницу с которой был вызван скрипт.

Что необходимо сделать, чтобы использовать скрипт?

С начала уточните у администратора сервера расположение Перл и SendMail. И внесите при необходимости изменения.

Далее закачайте скрипт на сервер в ASCII режиме. И установите ему атрибут "755". То есть сделайте его исполняемым.

Создайте на своей страничке форму подобную приведенной выше. И пользуйтесь на здоровье!

Источник: http://rsw.mastak.com


Copyright © 2000г. "Internet Zone" & Nik Romanov, info@izcity.com

Hosted by uCoz