<?
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>';}
}
?>
Mail() - дублирование письма
Вот пример (простой) кода:
index.php
Код:
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;
}
?>
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";
?>
$url = "tmp";
$maxsize = 300;
$from = "Сообщение с сайта %sitename%";
//Адрес куда отправлять
$mailto = "Name@site.ru";
?>
Кто-нибудь сталкивался? Подскажите, как решить проблему...
Решается очень просто - в функцию mail() не надо передавать первый параметр где указывается адрес. То есть в вашем случае привести ее к такому виду:
Код:
return @mail("", "$subj", $zag, $head)
RussianSpy, огромное вам спасибо :) Проблема сразу исчезла.
Дубликат письма отсылается из-за указания поля $head .= "To: $to\n";
Или поле To не указывайте, или первый параметр в mail пустой должен быть.
Я так понимаю что никто сообщения не читает - автор топика давным-давно получил ответ на свой вопрос. Или вы так сообщения набиваете отвечая в некротопиках?