Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Mail() - дублирование письма

4.9K
23 марта 2009 года
Valar
81 / / 18.03.2008
Добрый день. Возникла странная проблема при использовании функции mail() на хостинге от мастерхоста. Любое письмо отправляется дважды. Такая проблема только на этом хостинге.

Вот пример (простой) кода:

index.php
Код:
<?
include("./config_mail.php");
include("./functions_mail.php");


if($_POST['do'] =='') {
    //Отображаем форму
    echo '<form action="" method="post" enctype="multipart/form-data">';
    echo 'Ваше имя: <input name="name" type="text" value=""><br/>';
    echo 'Ваш e-mail: <input name="mail" type="text" value=""><br/>';
    echo 'Тема сообщения: <input name="subj" type="text" value=""><br/>';
    echo 'Сообщение:<br/>';
    echo '<textarea name="text" rows=5 cols=20 wrap="off"></textarea><br/>';
    echo 'Файл (не более 300кб): <input type="file" name="FILE" size="30" />  ';
    echo '<input name="do" type="submit"  value="Отправить">';
    echo '</form>';

              }

if($_POST['do'] !='') {
    //Проверяем входящие данные (имя, е-мэйл)
     if($_POST['name'] !='') {
        if($_POST['subj'] !='') {
        if(checkmail($_POST['mail']) !== -1) {
              //переопределяем переменные
              $name =  strip_tags($_POST['name']);
              $text =  $_POST['text'];
              $email = $_POST['mail'];
              $subj =  $_POST['subj'];
              //Формируем текст сообщения
              $message = "Отправитель ".$email."<br/>---------------------------<br/>";
              $message .= $text."<br/>---------------------------<br/>
С уважением, ".$name;

              //Проверяем, существует ли файл.
if($_FILES['FILE']['name'] !=''){
                //Проверяем размер файла
   if($_FILES['FILE']['size'] != 0 AND $_FILES['FILE']['size']<=($maxsize*1024)) {
            //Проверяем загрузился ли файл на сервер
       if(is_uploaded_file($_FILES['FILE']['tmp_name']))   {
            //Перемещаем загруженный файл в необходимую папку $url
            if(move_uploaded_file($_FILES['FILE']['tmp_name'], $url."/".basename

($_FILES['FILE']['name']))) {

                    //XMail( $from, $to, $subj, $text, $filename)
                      if(xmail($from,$mailto,$subj,$message,$url."/".basename

($_FILES['FILE']['name']))!== FALSE) {
                       echo '<p>Сообщение отправлено<br/><a

href="index.php">назад</a></p>';
@unlink($url."/".basename($_FILES['FILE']['name']));
                      }
                }    else { echo 'Произошла ошибка при перемещении

файла в папку'.$url;}

            }  else { echo'Прозошла ошибка при загрузке файла на сервер';}

       } else {echo 'Размер файла не должен превышать '.$maxsize.' Кб';}
     }

        else {//Используем функцию отправки сообщения без вложения
             if(sendmail($from,$mailto,$subj,$message) !== FALSE) {
              echo '<p>Сообщение отправлено<br/><a

href="index.php">назад</a></p>';

           }

           else { echo 'Отправка сообщения невозможна: повторите позднее<br/><a

href="index.php">назад</a></p>';}
          }


         }  else {echo 'Отправка сообщения невозможна:введите корректный <b>e-

mail</b><br/><a href="index.php">назад</a>';}

        }   else {echo 'Отправка сообщения невозможна: необходимо ввести

<b>тему сообщения</b><br/><a href="index.php">назад</a>';}


    } else {echo 'Отправка сообщения невозможна: необходимо ввести

<b>имя</b><br/><a href="index.php">назад</a>';}
    }
?>



functions_mail.php
Код:
<?

function xmail( $from, $to, $subj, $text, $filename) {
$f         = fopen($filename,"rb");
$un        = strtoupper(uniqid(time()));
$head      = "From: $from\n";
$head     .= "To: $to\n";
$head     .= "Subject: $subj\n";
$head     .= "X-Mailer: PHPMail Tool\n";
$head     .= "Reply-To: $from\n";
$head     .= "Mime-Version: 1.0\n";
$head     .= "Content-Type:multipart/mixed;";
$head     .= "boundary=\"----------".$un."\"\n\n";
$zag       = "------------".$un."\nContent-Type:text/html;\n";
$zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
$zag      .= "------------".$un."\n";
$zag      .= "Content-Type: application/octet-stream;";
$zag      .= "name=\"".basename($filename)."\"\n";
$zag      .= "Content-Transfer-Encoding:base64\n";
$zag      .= "Content-Disposition:attachment;";
$zag      .= "filename=\"".basename($filename)."\"\n\n";
$zag      .= chunk_split(base64_encode(fread($f,filesize($filename))))."\n";

return @mail("$to", "$subj", $zag, $head);
}

function sendmail($from,$to,$subj,$text) {
$head      = "From: $from\n";
$head     .= "To: $to\n";
$head     .= "Subject: $subj\n";
$head     .= "X-Mailer: Freshcoder.ru\n";
$head     .= "Reply-To: $from\n";
$head     .= "Mime-Version: 1.0\n";
$head     .= 'Content-type: text/html; charset=windows-1251' . "\r\n";
return @mail($to,$subj,$text,$head);
}

function checkmail($mail) {
// режем левые символы и крайние пробелы
$mail=trim($mail);
// если пусто - выход
if (strlen($mail)==0) return -1;
if (!preg_match("/^[a-z0-9_-]{1,20}+(\.){0,2}+([a-z0-9_-]){0,20}@(([a-z0-9-]+\.)+(com|net|org|mil|".
"edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-".
"9]{1,3}\.[0-9]{1,3})$/is",$mail))
return -1;
return $mail;
}

?>



config_mail.php
 
Код:
<?

$url = "tmp";
$maxsize = 300;
$from = "Сообщение с сайта %sitename%";
//Адрес куда отправлять
$mailto = "Name@site.ru";
?>



Кто-нибудь сталкивался? Подскажите, как решить проблему...
13
23 марта 2009 года
RussianSpy
3.0K / / 04.07.2006
Буквально на днях столкнулся с такой же проблемой. Встречается на некоторых хостингах.
Решается очень просто - в функцию mail() не надо передавать первый параметр где указывается адрес. То есть в вашем случае привести ее к такому виду:

 
Код:
return @mail("", "$subj", $zag, $head)
4.9K
23 марта 2009 года
Valar
81 / / 18.03.2008
RussianSpy, огромное вам спасибо :) Проблема сразу исчезла.
71K
27 апреля 2011 года
MuxauJI Sh
1 / / 27.04.2011
Дубликат письма отсылается из-за указания поля $head .= "To: $to\n";
71K
28 апреля 2011 года
Astman
2 / / 28.04.2011
Или поле To не указывайте, или первый параметр в mail пустой должен быть.
13
28 апреля 2011 года
RussianSpy
3.0K / / 04.07.2006
Я так понимаю что никто сообщения не читает - автор топика давным-давно получил ответ на свой вопрос. Или вы так сообщения набиваете отвечая в некротопиках?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог