[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Отправка писем из сайта
Wladim
Здравствуйте.
Перечитал раздел форума "Отправка писем на email силами php" и не нашел во всех ответах решения моей проблемы.
Суть вопроса в следующем.
Через форму в файле mail.php надо отправить письмо на адрес админа (webmaster@gita.net):
<td width="100%" valign="top">
<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>
Файл-обработчик add_mail.php
<?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";
}
}

?>
Файл конфигурации config.php
<?php
$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 = 'Ваше сообщение успешно отправлено.';
?>
При отправке письма выдается сообщение: 'Ваше сообщение успешно отправлено.' и ниже: "Ошибка status" и письмо не приходит Админу.
Я понимаю, что лето, жара, отпуск, а тут кто-то со своей проблемой...
И все же прошу вас, кто может реально - подскажите в чем моя ошибка и как ее исправить.
Буду очень признателен за помощь.



Спустя 5 минут, 12 секунд (10.08.2012 - 13:42) netruxa написал(а):
Вы для начала проверьте, работает ли вообще у Вас mail?
запустите
mail("ваше мыло","тема","сообщение");

Спустя 20 минут, 28 секунд (10.08.2012 - 14:02) kamanch написал(а):
Вообще-то и в коде не правильно, и netruxa не прав.
Проверку, в том числе и в коде, нужно писать с условием:

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
              <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="posSubject" id="posSubject" /><br><br>

<label
for="posText">   <b>Сообщение:</b></label><br>
    
<textarea cols="63" rows="4" name="posText" id="posText"></textarea><br>
и файла-обработчика add_mail.php
{
$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 на свой почтовый ящик у хостера, отправил письмо и тот же результат, т.е. - нет письма и ругается на строку
Цитата
if (count($info) > 0)


_____________
в Начале было СЛОВО, а потом - словоЗАслово и ... как поехало! http://a-plagiata.net/service/
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.