Перечитал раздел форума "Отправка писем на email силами php" и не нашел во всех ответах решения моей проблемы.
Суть вопроса в следующем.
Через форму в файле mail.php надо отправить письмо на адрес админа (webmaster@gita.net):
<td width="100%" valign="top">Файл-обработчик add_mail.php
<h3 align="center">Написать письмо Админу</h3>
<p id="emailSuccess">
<div id="contactFormArea">
<form action="add_mail.php" method="post" id="cForm">
<input type="hidden" name="act" value="y" />
<label for="posName"> <b>Ваши Фамилия, Имя, Отчество:</b></label><br>
<input class="text" type="text" size="70" name="posName" id="posName" /><br><br>
<label for="posEmail"> <b>Ваш E-mail адрес:</b></label><br>
<input class="text" type="text" size="70" name="posEmail" id="posEmail" /><br><br>
<label for="posRegard"> <b>Тема сообщения:</b></label><br>
<input class="text" type="text" size="70" name="posRegard" id="posRegard" /><br><br>
<label for="posText"> <b>Сообщение:</b></label><br>
<textarea cols="63" rows="4" name="posText" id="posText"></textarea><br>
<br><br><center><label>
<input class="submit" type="submit" name="selfCC" id="selfCC" value=" Отправить " /></label></center>
</form><br>
</td>
<?phpФайл конфигурации config.php
require_once('config.php');
if ($_POST['act'] == "y")
{
if (isset($_POST['posName']) && $_POST['posName'] == "")
{
$statusError = "$errors_name";
}
elseif (isset($_POST['posEmail']) && $_POST['posEmail'] == "")
{
$statusError = "$errors_mailfrom";
}
elseif(isset($_POST['posEmail']) && !preg_match("/^([a-z,._,0-9])+@([a-z,._,0-9])+(.([a-z])+)+$/", $_POST['posEmail']))
{
$statusError = "$errors_incorrect";
unset($_POST['posEmail']);
}
elseif (isset($_POST['posRegard']) && $_POST['posRegard'] == "")
{
$statusError = "$errors_subject";
}
elseif (isset($_POST['posText']) && $_POST['posText'] == "")
{
$statusError = "$errors_message";
}
elseif (!empty($_POST))
{
$subject = "MIME-Version: 1.0\r\n";
$message = "MIME-Version: 1.0\r\n";
$headers = "MIME-Version: 1.0\r\n";
$headers = "Content-type: text/html; charset=windows-1251" ."\r\n";
$headers .= "Content-Type: $content charset=$charset\r\n";
$headers .= "Date: ".date('Y-m-d (H:i:s)',time())."\r\n";
$headers .= "From: \"".$_POST['posName']."\" <".$_POST['posEmail'].">\r\n";
$headers .= "X-Mailer: My Send E-mail\r\n";
mail("$mailto","$subject","$message","$headers");
unset($posName, $posText, $mailto, $subject, $posRegard, $message);
$statusSuccess = "$send";
}
}
?>
<?phpПри отправке письма выдается сообщение: 'Ваше сообщение успешно отправлено.' и ниже: "Ошибка status" и письмо не приходит Админу.
$mailto = "webmaster@gita.net";
$charset = "windows-1251";
$content = "text/plain";
$statusError = "Ошибка status";
$statusSuccess = "Ошибка 2";
$errors_name = 'Введите вашы Фамилию, Имя, Отчество';
$errors_mailfrom = 'Введите свой E-mail адрес';
$errors_incorrect = 'Заполните правильно Ваш E-mail адрес';
$errors_subject = 'Введите тему сообщения';
$errors_message = 'Наберите текст вашего сообщения';
$captcha_error = 'Проверьте правильность ввода защитного кода';
$send = 'Ваше сообщение успешно отправлено.';
?>
Я понимаю, что лето, жара, отпуск, а тут кто-то со своей проблемой...
И все же прошу вас, кто может реально - подскажите в чем моя ошибка и как ее исправить.
Буду очень признателен за помощь.
Спустя 5 минут, 12 секунд (10.08.2012 - 13:42) netruxa написал(а):
Вы для начала проверьте, работает ли вообще у Вас mail?
запустите
запустите
mail("ваше мыло","тема","сообщение");
Спустя 20 минут, 28 секунд (10.08.2012 - 14:02) kamanch написал(а):
Вообще-то и в коде не правильно, и netruxa не прав.
Проверку, в том числе и в коде, нужно писать с условием:
А так, у тебя, Wladim, выходит, что если письмо не отправилось, то mail() вернет в никуда false, она же функция и возвращает результат, только ты его ни как не обработал, и статус при любом раскладе у тебя равен 'Ваше сообщение успешно отправлено.'
Если вернет false, то убирай заголовки, отправь просто текст для теста.
Если опять вернет false, посмотри у хостера фак. Бывает, что хостер требует, чтобы отправка шла с реально существующего у него ящика.
У моего, например так, и никак по другому:
P.S. ты пошто все переменные в кавычки запаковал?
Проверку, в том числе и в коде, нужно писать с условием:
if(mail($mailto, $subject, $message, $headers)){
$statusSuccess = $send;
} else {
$statusSuccess = $not_send;
}
А так, у тебя, Wladim, выходит, что если письмо не отправилось, то mail() вернет в никуда false, она же функция и возвращает результат, только ты его ни как не обработал, и статус при любом раскладе у тебя равен 'Ваше сообщение успешно отправлено.'
Если вернет false, то убирай заголовки, отправь просто текст для теста.
Если опять вернет false, посмотри у хостера фак. Бывает, что хостер требует, чтобы отправка шла с реально существующего у него ящика.
У моего, например так, и никак по другому:
mail ($to, $subject, $message, $headers, "-f ". $from);
// $from - реально существующий на хостинге ящик
P.S. ты пошто все переменные в кавычки запаковал?
Спустя 4 минуты, 21 секунда (10.08.2012 - 14:07) Wladim написал(а):
Проверил
<?phpи получил ответ: 'можно'
echo function_exists('mail') ? 'можно' : 'нельзя';?>
Спустя 7 минут, 9 секунд (10.08.2012 - 14:14) Wladim написал(а):
kamanch, Ваш ответ мне надо еще "переварить", поскольку для меня РНР только в начале освоения.
А по поводу, что я "переменные в кавычки запаковал" - так по другому меня пока не научили...
А по поводу, что я "переменные в кавычки запаковал" - так по другому меня пока не научили...
Спустя 23 минуты, 10 секунд (10.08.2012 - 14:37) Wladim написал(а):
kamanch, вставил проверку:
Убрал кавычки в переменных.
Буду дальше изучать Ваш ответ.
mail($mailto, $subject, $message, $headers);пришло сообщение: 'Ваше сообщение успешно отправлено.', но письма в ящике (на хосте) нет...
if(mail($mailto, $subject, $message, $headers)){
$statusSuccess = $send;
} else {
$statusSuccess = $not_send;
}
Убрал кавычки в переменных.
Буду дальше изучать Ваш ответ.
Спустя 4 часа, 8 секунд (10.08.2012 - 18:37) akuchkovsky написал(а):
Из php help. Верно пашет на двух сайтах.
if ($submit) {
//Проверяем поле ФИО
if(!$fio)
$info[] = '<div class="error">Введите ФИО</div>';
//Проверяем поле email
if(!$email)
$info[] = '<div class="error">Введите E-mail</div>';
else
{
if(!preg_match("|^[-0-9a-z_\.]+@[-0-9a-z^\.]+\.[a-z]{2,6}$|i", $email))
$info[] = '<div class="error">E-mail не верен</div>';
}
//Проверяем поле телефона
if(!$number)
$info[] = '<div class="error">Введите контактный телефон</div>';
else
{
if(!preg_match("/^[\-\+0-9]+$/",$number))
$info[] = '<div class="error">Контактный телефон в формате 8-913-XXX-XXXX</div>';
}
//Если ошибок нет, выводим информационное сообщение, отправляем данные на почту и скриптом сбрасываем массив $_POST
if (count($info) == 0)
{
// несколько получателей
$to = 'first@mail.ru' . ', '; // обратите внимание на запятую
$to .= 'second@yandex.ru';
// тема письма
$subject = 'Заявка с сайта SITE.COM';
// текст письма
$message = '
<h2>Заявка с сайта SITE.COM</h2>
<table style="background-color: #FDFCF1; padding: 10px; border: 1px solid #D5D5D5; width: 500px; text-align: left; padding: 8px 10px; border-radius: 10px; white-space: nowrap;">
<tbody>
<tr><td>ФИО</td><td>'. $fio .'</td></tr>
<tr><td>e-mail</td><td><a href="mailto:'. $email .'">'. $email .'</a></td></tr>
<tr><td>Контактный телефон</td><td>'. $number .'</td></tr>
<tr><td>Марка</td><td>'. $mark .'</td></tr>
<tr><td>Модель</td><td>'. $model .'</td></tr>
<tr><td>Год выпуска</td><td>'. $years .'</td></tr>
<tr><td>VIN</td><td>'. $vin .'</td></tr>
<tr><td>Объем двигателя</td><td>'. $amountMotor .'</td></tr>
<tr><td>Тип двигателя</td><td>'. $typeMotor .'</td></tr>
<tr><td>Тип коробки передач</td><td>'. $typeTransmission .'</td></tr>
<tr><td>Каталожный номер</td><td>'. $catNumber .'</td></tr>
<tr><td>Необходимые запчасти</td><td>'. $parts .'</td></tr>
<tbody>
</table>
';
// Для отправки HTML-письма должен быть установлен заголовок Content-type
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
$headers .= 'From: SibAvto.org <admin@mail.ru>' . "\r\n";
// Отправляем
$reMail = mail($to, $subject, $message, $headers);
if($reMail)
{
$info[] = '<div class="message">Ваша заявка принята, спасибо!</div>';
$info[] = '
<script type="text/javascript">
var $win = location.href;
function refreshForm(){
location.href = $win;
}
window.setTimeout("refreshForm()", 3000);
</script>
';
}
else
$info[] = '<div class="error">По неизвестным причинам заявка не отправлена, сообщите об этом по контактным данным</div>';
unset($_POST);
}
$message = implode('', $info);
}
Спустя 2 дня, 18 часов, 29 минут, 27 секунд (13.08.2012 - 13:07) Wladim написал(а):
kamanch, возможно, что не все Ваши рекомендации я понял, но то, что усвоил никак пока мне не помогло. Экспериментировал на локалке. Письмо отправляется (в папку !sendmail), вот результат:
Цитата |
X-Sendmail-Cmdline: sendmail.pl -t -i To: webmaster@gita.net Subject: Date: 2012-08-13 (13:27:03) From: "Степанов" <star_com@mail.ru> X-Mailer: My Send E-mail |
то есть без Темы и Текста. А на сайте обработчик сообщает, что "Ошибка status". Замаялся менять варианты...
Вот часть исправленного кода файла mail.php
А вот вариант akuchkovsky вовсе отказывался работать. Наверное я что-то не то делал... поскольку с классами пока не знаком.
Мне бы "добить" СВОЙ вариант до рабочего состояния.
Вот часть исправленного кода файла mail.php
<form action="add_mail.php" method="post" id="cForm">и файла-обработчика add_mail.php
<input type="hidden" name="act" value="y" />
<label for="posName"> <b>Ваши Фамилия, Имя, Отчество:</b></label><br>
<input class="text" type="text" size="70" name="posName" id="posName" /><br><br>
<label for="posEmail"> <b>Ваш E-mail адрес:</b></label><br>
<input class="text" type="text" size="70" name="posEmail" id="posEmail" /><br><br>
<label for="posRegard"> <b>Тема сообщения:</b></label><br>
<input class="text" type="text" size="70" name="posSubject" id="posSubject" /><br><br>
<label for="posText"> <b>Сообщение:</b></label><br>
<textarea cols="63" rows="4" name="posText" id="posText"></textarea><br>
{
$subject = "";
$message = "";
$headers = "";
$headers .= "Date: ".date('Y-m-d (H:i:s)',time())."\r\n";
$headers .= "From: \"".$_POST['posName']."\" <".$_POST['posEmail'].">\r\n";
$headers .= "X-Mailer: My Send E-mail\r\n";
mail($mailto, $subject, $message, $headers);
if(mail($mailto, $subject, $message, $headers)){
$statusSuccess = $send;
} else {
$statusSuccess = $not_send;
}
unset($posName, $posText, $mailto, $subject, $posSubject, $message, $headers);
$statusSuccess = $send;
}
}
А вот вариант akuchkovsky вовсе отказывался работать. Наверное я что-то не то делал... поскольку с классами пока не знаком.
Мне бы "добить" СВОЙ вариант до рабочего состояния.
Спустя 6 часов, 3 минуты, 58 секунд (13.08.2012 - 19:10) akuchkovsky написал(а):
Вот так у меня работает
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>HTML</title>
</head>
<body>
<table>
<tbody>
<tr>
<td width="100%" valign="top">
<h3 align="center">Написать письмо Админу</h3>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post" id="cForm">
<input type="hidden" name="act" value="y" />
<label for="posName"><b>Ваши Фамилия, Имя, Отчество:</b></label><br>
<input class="text" type="text" size="70" name="posName" id="posName" /><br><br>
<label for="posEmail"> <b>Ваш E-mail адрес:</b></label><br>
<input class="text" type="text" size="70" name="posEmail" id="posEmail" /><br><br>
<label for="posRegard"> <b>Тема сообщения:</b></label><br>
<input class="text" type="text" size="70" name="posRegard" id="posRegard" /><br><br>
<label for="posText"> <b>Сообщение:</b></label><br>
<textarea cols="63" rows="4" name="posText" id="posText"></textarea><br>
<br>
<label>
<input class="submit" type="submit" name="selfCC" id="selfCC" value="Отправить" />
</label>
</form>
</td>
</tr>
</tbody>
</table>
<?
$statusError = "Ошибка status";
$statusSuccess = "Ошибка 2";
$errors_name = 'Введите вашы Фамилию, Имя, Отчество';
$errors_mailfrom = 'Введите свой E-mail адрес';
$errors_incorrect = 'Заполните правильно Ваш E-mail адрес';
$errors_subject = 'Введите тему сообщения';
$errors_message = 'Наберите текст вашего сообщения';
$captcha_error = 'Проверьте правильность ввода защитного кода';
$send = 'Ваше сообщение успешно отправлено.';
if ($_POST['act'] == "y")
{
if (isset($_POST['posName']) && $_POST['posName'] == "")
{
$info[] = $errors_name;
}
if (isset($_POST['posEmail']) && $_POST['posEmail'] == "")
{
$info[] = $errors_mailfrom;
}
if(isset($_POST['posEmail']) && !preg_match("/^([a-z,._,0-9])+@([a-z,._,0-9])+(.([a-z])+)+$/", $_POST['posEmail']))
{
$info[] = $errors_incorrect;
}
if (isset($_POST['posRegard']) && $_POST['posRegard'] == "")
{
$info[] = $errors_subject;
}
if (isset($_POST['posText']) && $_POST['posText'] == "")
{
$info[] = $errors_message;
}
if( count($info) > 0 )
echo implode('<br />', $info);
else
{
$mailto = 'webmaster@gita.net';
$message = htmlspecialchars(strip_tags($_POST['posText']));
$subject = htmlspecialchars(strip_tags($_POST['posRegard']));
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=windows-1251' . "\r\n";
//$headers .= 'Date: '. date('Y-m-d H:i:s',time()) ."\r\n";
$headers .= 'From: '. htmlspecialchars(strip_tags($_POST['posName'])) .'<'. htmlspecialchars(strip_tags($_POST['posEmail'])) .'>'. "\r\n";
$mailSend = mail($mailto,$subject,$message,$headers);
if($mailSend)
echo $send;
}
}
?>
</body>
</html>
Спустя 1 день, 11 часов, 6 минут, 15 секунд (15.08.2012 - 06:17) Slavok написал(а):
А в спам письмо не попадает? Еще некоторые почтовые сервера, к примеру Mail.ru, смотрят заголовки письма и если письмо отправлено с не существующего адреса, типа apache@localhost, то письмо зарезают, оно не доходят. Решение - отправлять письма с реально существующего адреса.
Спустя 1 день, 16 часов, 21 секунда (16.08.2012 - 22:17) Wladim написал(а):
akuchkovsky, использовал Ваш код, спасибо. Однако после отправки письма сообщает, что письмо отправлено и здесь же ругается на строку
Цитата |
{ $info[] = $errors_message; } if (count($info) > 0) echo implode('<br />', $info); else { |
(выделена жирным...). И письмо не пришло...
Slavok, в спаме на Mail.ru его нет ($mailto настроил на Mail.ru).
Перенастроил $mailto на свой почтовый ящик у хостера, отправил письмо и тот же результат, т.е. - нет письма и ругается на строку
Slavok, в спаме на Mail.ru его нет ($mailto настроил на Mail.ru).
Перенастроил $mailto на свой почтовый ящик у хостера, отправил письмо и тот же результат, т.е. - нет письма и ругается на строку
Цитата |
if (count($info) > 0) |
_____________
в Начале было СЛОВО, а потом - словоЗАслово и ... как поехало! http://a-plagiata.net/service/