|
|
|
| Слепил форму из нескольких примеров, поэтому что-то не работает, а что понять не могу. Из изменений которые я вносил - это отправка именно на конкретно указанный в скрипте адрес. Подскажите что не так
форма:
<center>
<table width=1 border=0>
<form action=mail.php enctype='multipart/form-data' method=post>
<tr>
<td width=50%>Ваш эл. адрес:</td><td align=right><input type=text name=mail_from maxlength=32></td>
</tr>
<tr>
<td width=50%>Тема письма:</td><td align=right><input type=text name=mail_subject maxlength=64></td>
</tr>
<tr>
<td colspan=2>Сообщение:<br><textarea cols=50 rows=8 name=mail_msg></textarea></td>
</tr>
<tr>
<td colspan=2><input type=submit value='Отправить'></td>
</tr>
</form>
</table>
</center>
|
обработчик:
<?php
if(empty($_POST['mail_from'])) exit("Введите адрес получателя");
// проверяем правильности заполнения с помощью регулярного выражения
if (!preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i", $_POST['mail_from'])) exit("Введите адрес в виде somebody@server.com");
$thm = $_POST['mail_subject'];
$msg = $_POST['mail_msg'];
$mail_from = $_POST['mail_from'];
// мыло админа
$mail_admin = "admin@admin.com";
// Отправляем почтовое сообщение
send_mail($mail_from, $thm, $msg);
// Вспомогательная функция для отправки почтового сообщения с вложением (Trianon)
function send_mail($mail_from, $thema, $html)
{
$EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём
$boundary = "--".md5(uniqid(time())); // любая строка, которой не будет ниже в потоке данных.
$headers = "MIME-Version: 1.0;$EOL";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";
$headers .= "To: $mail_admin";
$headers .= "From: $mail_from";
$multipart = "--$boundary$EOL";
$multipart .= "Content-Type: text/html; charset=windows-1251$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= $EOL; // раздел между заголовками и телом html-части
$multipart .= chunk_split(base64_encode($html));
if(!mail($mail_from, $thema, $multipart, $headers))
{return False; //если не письмо не отправлено
}
else { //// если письмо отправлено
return True;
}
exit;
}
?>
|
И сразу еще один вопрос - как сделать так чтобы при успешном\ неуспешном отпралении письма на страницы выводилась соответствующая надпись: письмо отправлено\ не отправлено | |
|
|
|
|
|
|
|
для: Dizels
(27.03.2009 в 16:10)
| | очень нужна ваша помощь | |
|
|
|
|
|
|
|
для: Dizels
(27.03.2009 в 17:03)
| | >что-то не работает, а что понять не могу
Хотя бы поэтому мы не сможем Вам помочь... | |
|
|
|
|
|
|
|
для: ddhvvn
(27.03.2009 в 18:40)
| | Письмо не приходит, а почему - мне не понятно, вроде все правильно. Просто я еще не разу форму не делал, поэтому мог что-то в коде напутать вот и прошу посмотреть. как иначе объяснить - не знаю | |
|
|
|
|
|
|
|
для: Dizels
(27.03.2009 в 22:25)
| | возможно ошибка не ваша, а хостер не дает пользоваться функцией mail() | |
|
|
|
|
|
|
|
для: nikita2206
(27.03.2009 в 23:16)
| | Нет, до этого письмо отправлялось, а потом я переделал так как мне надо и письмо не приходит, т.е. ошибка в коде, но где - я не могу понять | |
|
|
|
|
|
|
|
для: Dizels
(28.03.2009 в 18:46)
| | вопрос все еще актуален.
Если нет желания разбираться в коде, то прошу дать работающий код, где адрес куда письмо будет отправляться нужно где-то один раз указать и все и чтобы пользователь не видел куда письмо отправляется. | |
|
|
|
|
|
|
|
для: Dizels
(03.04.2009 в 21:10)
| | Потому что код безолаберный, если перевести его на русский то будет лвапыжвламтиыжвлао
:)
начните с простой функции mail(); и постепенно наращивайте функционал, добавляя нужные проверки и все остальные перелести, постарайтесь Вдумчиво читать и понимать то что читаете, Ни кто не будет делать за вас вашу работу, вы ее должны сделать сами. если отправлялись письма, а теперь нет то возможно где то спрятана ошибка повысьте уровень предупреждений php до варнингов, перед отправкой на мыло выводите все переменные на печать в браузере., непонятные строки кода читайте пока не наступит прояснение, 100 раз подумайте прежде чем оставлять неинициализированную переменную и 1000 раз подумайте заставив php проглатить ошибку.
вот что получаю если прогнать вашу функцию через обработчик ошибок.
На входе в функцию инициализировано только 3 переменные это
$html;
$mail_from;
$thema
Извещение (Notice): строка 34 - Undefined variable: mail_admin \могу ошибатся может и все нормально просто не все переменные передал Но зато....ЭТО
Предупреждение отладчика:
строка 54 - mail() [<a href='function.mail'>function.mail</a>]: "sendmail_from" not set in php.ini or custom "From:" header missing
а вот это в 54 строке
if(!mail($mail_from, $thema, $multipart, $headers))
вызывает срабатывание 56 строки а в ней
return False;
:)
Удачи в разборках... | |
|
|
|
|
|
|
|
для: Dizels
(03.04.2009 в 21:10)
| | Если подытожить в целом справедливое замечание предыдущего оратора, то окажется, что
не определена переменная $mail_admin в теле функции send_mail()
(мой ник из кода неплохо было бы убрать) | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2009 в 22:21)
| | Большое спасибо за ответы - ник уберу, просто при копировании примеров вставился) | |
|
|
|