RTFM! статьи, советы, скрипты
::Заработок с помощью сайта ::JScript по-русски! ::Все русские мануалы::
МЕНЮ
О САЙТЕ
НОВОСТИ
СТАТЬИ
КНИГИ
АППЛЕТЫ
СВЯЗЬ

СЧЕТЧИКИ
Rambler's Top100
Рейтинг@Mail.ru
Яндекс цитирования

Простой веб-интерфейс для работы с почтовым ящиком POP3.

Автор: Maxxx Сайт: http://deadman.narod.ru     Рейтинг: N/A из 7       <<НАЗАД
   
   Используя его можно просматривать, удалять и отвечать на сообщения.
   Также имеется возможность просматривать или скачивать прикрепленные к письму
   файлы. Пока предусмотрена работа с письмами только в кодировках win1251 и
   koi8-r. Возможно, в следующих версиях, будет добавлена поддержка других
   кодировок. Для работы необходим установленный на сервере sendmail и пакет
   библиотек MIMETools. Взять его можно здесь:
   http://www.zeegee.com/code/perl/MIME-tools/download/MIME-tools-5.411.tar.gz
   Для его установки обратитесь к администратору сервера, либо в службу поддержки
   компании, на чьем хостинге вы планируете использовать скрипт.
   
   ----------------------------------- ФАЙЛЫ --------------------------------------
   Распространяется как zip-архив, содержащий три файла:
   ----------------------------
   
   readme - этот файл
   readme.html - тоже самое, в хтмл варианте
   mail.pl - собственно, файл скрипта
   
   ---------------------------- УСТАНОВКА И НАСТРОЙКА -----------------------------
   
   Скопируйте файл mail.pl на сервер и установите права доступа как 755
   Настройка достаточна проста - откройте файл скрипта в текстовом редакторе и
   замените следующие строки:
   $mailserver = 'mail.server.ru'; на адрес своего майлсервера
   $admail = 'webmaster@server.ru'; на е-майл вашего вебмастера
   Затем, в корневой директории вашего веб-сервера создайте каталог "mail", где
   будут временно храниться прикрепленные файлы.
   
   Все, от вас больше ничего не требуется, скрипт готов к работе.
   
   ------------------------------- РАБОТА С ПОЧТОЙ --------------------------------
   
   Все элементарно! После установки и настройки заходите по адресу
   http://www.yourserver.ru/cgi-bin/mail.pl
   Вам будет предложено ввести логин и пароль. Введите логин и пароль от вашего
   почтового ящика на сервере, имя которого указано в скрипте, как имя майлсервера
   и нажмите кнопку "Войти". Увидите список пришедших вам сообщений(если таковые
   имеются). Чтобы просмотреть сообщение, щелкните по его теме. Для удаления -
   отметьте ненужные сообщения и нажмите кнопку "Удалить".
   
   ---------------------------------- ВНИМАНИЕ! -----------------------------------
   
   Возможны некоторые ошибки в плане безопасности - будьте внимательны при ее
   использовании. И еще:
   данная версия скрипта является бетой и может работать некорректно. Поэтому,
   автор не несет никакой ответственности за утерю или порчу какой-либо информации.
   
   Распространяется бесплатно; любые изменения, добавления и исправления
   приветствуются(только не забываем извещать автора!).
   
   #!/usr/bin/perl
   use Mail::POP3Client;
   $ver='MailInterface script v.0.3.22 Beta (от 13.10.2001)';
   
   ################################################################################
   ####### Скрипт создания простого веб-интерфейса для работы с POP3 e-mail #######
   ####### Для его функционирования необходимы библиотека Mail::POP3Client #######
   ####### и установленный на сервере пакет MIME-tools. #######
   ################################################################################
   
   ################################################################################
   ####### Замените mail.server.ru на адрес своего mail-сервера. #######
   ####### webmaster@server.ru - e-mail адрес Вашего вебмастера. #######
   ################################################################################
   $mailserver = 'mail.ozara.ru';
   $admail = 'webmaster@ozara.ru';
   ################################################################################
   ####### Далее можете (и желательно) ничего не менять #######
   ################################################################################
   
   print "Content-type:text/html\n\n";
   %FORM=();
   ($result, $mess)=&GetFormInput;
   &Error($mess) if ($result==0);
   &passver;
   $login = $FORM{login};
   $password = $FORM{password};
   if ($FORM{'exit'} eq 'ok') {
   &userdir;
   $login=$FORM{login}='';
   $password=$FORM{password}='';
   }
   $authmode = "PASS";
   $pop = new Mail::POP3Client( USER => $login,
   PASSWORD => $password,
   HOST => $mailserver,
   AUTH_MODE => $authmode);
   # $FORM{code}='koi' if ($FORM{code} eq '');
   $koi="бвчзде_цъйклмнопртуфхжигюыэящшьасБВЧЗДЕ_ЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС";
   $win="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
   &output;
   
   ################################################################################
   
   sub main {
   
   if ($FORM{'send'} ne '') {
   &send_mess;
   return;
   }
   
   $number=$pop->Count();
   
   if ($FORM{'del'} eq 'ok') {
   &del_mess;
   return;
   }
   
   if ($FORM{'view'} ne '') {
   &userdir;
   &get_body($FORM{'view'});
   return;
   }
   if ($FORM{'login'} eq '') {
   print '
    Введите пароль: Логин: Пароль: ©2001 Argom Group
   ';
   return;
   };
   
   if ($number eq "-1") {
   print 'ВЫХОД ';
   print " \n";
   print 'Извините, но Вы ввели неверный пароль к ящику '.$login; print ', либо ящика с таким именем на нашем сервере не существует ';
   return;
   }
   &userdir;
   print "Ваш логин: $login \n";
   print " СОЗДАТЬ \n"; print "ВЫХОД \n";
   print " Сейчас в Вашем ящике ",$number," сообщений. \n";
   print "\n";
   print "\n";
   print "\n";
   
   if ($number ne "0") {
   print "\n";
   print " \# Отправитель Тема Удалить? \n";
   }
   for( $i = 1; $i <= $number; $i++ ) {
   print " \n";
   print " $i \n";
   $subj='';
   foreach( $pop->Head($i)) {
   /^(From):\s+/i && print " ",$_=&trans4b64($_)," \n";
   /^(Subject):\s+/i && { $subj=&trans4b64($_) };
   }
   if ($subj eq '') {
   $subj='Без темы';
   }
   print "\n ",$subj," \n";
   
   print " \n";
   print " \n";
   }
   if ($number eq "-1" || $number eq "0") {print ''}
   else {
   print ' ',"\n";
   print 'Удалить все отмеченные сообщения?',"\n";
   print '',"\n";
   }
   return;
   }
   
   ################################################################################
   
   sub get_body {
   $numb_mess = shift;
   print '';
   print " <<<назад \n";
   print " выбор кодировки: windows1251\n"; print "koi8-r \n";
   print " ВЫХОД \n";
   print ' '; print "Письмо \#$numb_mess\n"; foreach ($pop->Head($numb_mess)) { $_=~s/=\?koi8-r\?/=\?KOI8-R\?/; $_=~s/=\?Koi8-r\?/=\?KOI8-R\?/; $FORM{code}='win' if (($_=~/.*charset.*windows-1251/) && $FORM{code} ne 'koi'); $mailer=$_ if ($_=~/^X-Mailer:\s+/); if ($_=~/^From:\s+/) { (@subj)=split(/\s/,$_); foreach (@subj) { $from.=&trans4b64(' '.$_); } $ch=1; next; } if ($ch eq 1) { $from.=&trans4b64($_) if ($_=~/^\s*=\?.+\?.+\?=/); } if ($_=~/^Subject:\s+/) { (@subj)=split(/\s/,$_); foreach (@subj) { $subject.=&trans4b64(' '.$_); } $ch=2; next; } if ($ch eq 2) { $subject.=&trans4b64($_) if ($_=~/^\s*=\?.+\?.+\?=/); } if ($_=~/^To:\s+/) { (@subj)=split(/\s/,$_); foreach (@subj) { $to.=&trans4b64(' '.$_); } $ch=3; next; } if ($ch eq 3) { $to.=&trans4b64($_) if ($_=~/^\s*=\?.+\?.+\?=/); } if ($_=~/^Date:\s+/) { $date=&trans4b64($_); next; } } ($from)=$from=~/^\s*(.*)/; ($to)=$to=~/^\s*(.*)/; ($subject)=$subject=~/^\s*(.*)/; print " ($mailer) \n";
   print " Создано: $date \n";
   print " От: $from \n";
   print " Кому: $to \n";
   print " Тема: $subject \n";
   print ' Текст письма:'; $t=0; foreach ($pop->HeadAndBody($numb_mess)) { @body_m[$t]=&trans($_)."\n"; $t++; } &mime_op; &viewbody; print ' ';
   if (@mass) {
   print ''; print 'К письму были приложены файлы:',"\n"; print @mass; print ' ',"\n";
   }
   &send_mess;
   return;
   }
   
   ################################################################################
   
   sub trans {
   if ($_[1] ne 'back') {
   $instr= $_[0];
   if (($FORM{'code'} eq 'koi') || ($FORM{'code'} eq '')) {
   $outstr="";
   for ($w=0; $w=0) {
   $newsymb=substr($win, $pos, 1);
   $outstr.=$newsymb;
   }
   else {
   $outstr.=$symb;
   }
   }
   }
   $outstr=$instr if ($FORM{'code'} eq 'win')
   }
   else {
   $instr= $_[0];
   
   $outstr="";
   for ($w=0; $w=0) {
   $newsymb=substr($koi, $pos, 1);
   $outstr.=$newsymb;
   }
   else {
   $outstr.=$symb;
   }
   }
   }
   
   return ($outstr);
   }
   
   ################################################################################
   
   sub crypt {
   { $instr= $_[0];
   $outstr="";
   for ($w=0; $w/\>\;/;
   $f=~s/\"/\"\;/g;
   $f=~s/From://;
   $f=~s/Subject://;
   $f=~s/To://;
   $f=~s/Date://;
   $a=$f;
   if ($f=~/.+\?.+\?B\?.+\?=.*/) {
   ($a,$c,$f,$d)=$f=~/^\s*(.+\s*)=\?(.+)\?B\?\s*(.+)\s*\?=(.*)/;
   $decoded = decode_base64($f);
   $a.=$decoded;
   $a.=$d;
   }
   if ($f=~/.+\?.+\?Q\?.+\?=.*/) {
   ($a,$c,$f,$d)=$f=~/^\s*(.+\s*)=\?(.+)\?Q\?\s*(.+)\s*\?=(.*)/;
   $decoded = decode_qp($f);
   $a.=$decoded;
   $a.=$d;
   };
   $a=&trans($a) if ($c!~/win/);
   return ($a);
   }
   
   ################################################################################
   sub mime_op {
   use MIME::Parser;
   my $parser = new MIME::Parser;
   $parser->output_dir("$userdir");
   $msgs="MIME разбор не выполнен!\n";
   $entity = $parser->parse_data(\@body_m) or &Error($msgs);
   return;
   }
   
   ################################################################################
   
   sub viewbody {
   @files=<$userdir/*>;
   $i=0;
   foreach (@files) {
   $rw=$_;
   if ($rw=~/$userdir\/msg-.*-.*\.txt/) {
   open (DATAF,$_);
   @msg1=;
   close (DATAF);
   foreach $k (@msg1) {
   $k=~s//\>\;/g;
   $k=~s/\"/\"\;/g;
   print $k,"\n";
   }
   }
   else {
   $_=~s/$userdir\///;
   @mass[$i]="$_";
   $i++;
   }
   };
   return;
   }
   
   ################################################################################
   
   sub send_mess {
   if ($FORM{'send'} eq 'ok') {
   if (!$FORM{'m_to'} or $FORM{'m_to'}=~/^\s+/ or $FORM{'m_to'}!~/@/ ) {
   $mess='Некорректный адрес получателя';
   &Error($mess);
   return;
   }
   $headmb='Новое сообщение';
   use MIME::Entity;
   $top= MIME::Entity->build(Type =>"text/plain; charset=koi8-r",
   Encoding=> "8bit",
   'X-Mailer'=> $ver,
   From => $FORM{'login'},
   To => &trans($FORM{'m_to'},back),
   Subject => &trans($FORM{'m_subject'},back),
   Data => &trans($FORM{'m_message'},back));
   open MAIL, "| /usr/sbin/sendmail -t -oi -oem" or die "!!!";
   $top->print(\*MAIL);
   close MAIL;
   print "\n"; print "\n"; print "<<<назад Ваше сообщение отослано";
   }
   else {
   if ($FORM{'send'} ne 'new') {
   $subject="Re: ".$subject;
   $headmb='Ответить';
   }
   if ($FORM{send} eq 'new') {
   $headmb='Новое сообщение';
   print '';
   print " <<<назад \n";
   print " ВЫХОД \n";
   print ' ';
   }
   print <<_END_HTML
   
   $headmb: Кому: Тема: Сообщение: Здравствуйте!
   
   
   
   
   
   _END_HTML
   }
   return;
   }
   
   ################################################################################
   
   sub del_mess {
   $i=0;
   $count=0;
   for ($i; $i<=$number; $i++) {
   if ($FORM{$i} eq 'del') { $pop->Delete($i);
   $count++;
   }
   }
   print "Удалено $count сообщений \n"; print "<<<назад\n"; print ' ВЫХОД ';
   return;
   }
   
   ################################################################################
   
   sub output {
   print '
   
   
   
   
   
   '; &main; print "$verВнимание! Это тестовая версия программы"; print "Если возникнут проблемы, пишите администратору:$admail \n"; print " ";
   $pop->Close();
   exit 0;
   }
   
   ################################################################################
   
   sub userdir {
   $userdir="$ENV{DOCUMENT_ROOT}/mail/$login";
   if (-d $userdir) {
   @files=<$userdir/*>;
   foreach (@files) {
   unlink ($_);
   }
   }
   else
   {
   mkdir ("$userdir", 0755) || die "Невозможно создать $userdir: $!";
   }
   return;
   }
   
   ################################################################################
   
   sub GetFormInput
   { local($name, $value, $buffer, $err, $pair, @pairs);
    $err="Разбор запроса завершен.";
    if ($ENV{'REQUEST_METHOD'} eq 'GET')
    { @pairs=split(/&/, $ENV{'QUERY_STRING'});
    }
    elsif ($ENV{'REQUEST_METHOD'} eq 'POST')
    { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    @pairs=split(/&/, $buffer);
    }
    else
    { $err="Метод запроса не опознан. Используйте GET или POST.";
    return(0, $err);
    }
    foreach $pair (@pairs)
    { ($name, $value)=split(/=/, $pair);
    $value=~tr/+/ /;
    $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ge;
    $FORM{$name}=$value;
    }
    return(1, $err);
   };
   
   ################################################################################
   
   sub Error
   { local($message)=$_[0];
    print ""; print "Ошибка \n";
    print "$message\n";
    print "\n";
    print "\n";
   }
   
   ################################################################################
   
   
   


<<НАЗАД      ОЦЕНИТЬ СТАТЬЮ    ВЕРСИЯ ДЛЯ ПЕЧАТИ>>
Статья прочитана :  раз.




пейкюлю



 
 
 
 
 
pauk ©® 2000-2015. All rights reserved.
При перепечатке ссылка на сайт и указание обязательны.
Мнение администрации сайта не всегда совпадает с мнением автора.
Орфография и пунктуация - авторские.
Администрация не несет никакой ответственности за использование материалов.
.
Protected by Copyscape DMCA Takedown Notice Infringement Search Tool