Я использую функцию mail () php для простого процесса E-Mailing ввода контактной формы соответствующему лицу. Странная вещь заключается в том, что форма всегда использовалась для обработки E-Mails, но однажды это все остановилось, теперь функция возвращает false, но не дает никакой ошибки вообще.
Сайт находится на общем хосте. Когда вас спросили об этом, они рекомендовали использовать реле smtp xx.xxx.x.xxx
Исправьте меня, если я ошибаюсь, но функция mail () не предусматривает положения для этого? Наверняка, для устройства HOST требуется правильное конфигурирование реле?
Мой вопрос: это похоже на ошибку с конфигурацией хоста, или это мой код? Вот пример используемого почтового кода:
$to = "xxx@xxx.co.za"; //to who? $subject = "Website Contact: $mysubject"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "From: $fname<$email1>\r\n"; $headers .= "Reply-To: $email1\r\n"; $headers .= "Return-Path:$email1\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; $headers .= "Content-Transfer-Encoding: quoted-printable\r\n"; $msg2 = nl2br($msg); $send = mail($to, $subject, $msg2, $headers); //process mail if(!$send): //error stuff here endif;
Большое спасибо, Саймон
@eisberg – я использую собственный обработчик ошибок следующим образом:
//error handler function function customError($errno, $errstr){ $err = "\n".date('Ymd H:m:s')." Error: [$errno] $errstr"; $fh = fopen("errlog.txt", 'a+'); fwrite($fh, $err); fclose($fh); } set_error_handler("customError", E_ALL);
Это означает, что мне нужно изменить set_error_handler("customError", E_ALL);
to set_error_handler("customError", -1);
?
mail () возвращает false, но без ошибок
Добро пожаловать на PHP!
Это похоже на ошибку в конфигурации хоста, или это мой код?
Кто знает? mail()
– это черный ящик, из которого вы не найдете никакой полезной информации, если что-то пойдет не так.
Когда меня спросили об этом, они рекомендовали использовать реле smtp …
Действительно, вы, вероятно, должны. Взгляните на SwiftMailer , отличную, всеобъемлющую, современную библиотеку рассылки PHP, которая может напрямую говорить на этом SMTP-сервере. Он превосходит при создании сообщений MIME, как тот, который вы, похоже, тщательно собрали выше.
Другие популярные опции включают в себя почту PEAR , Zend Framework Zend_Mail и классику классики PHPMailer .
Похоже, что ваш хост отключил mail()
, вы должны изучить использование SMTP для отправки почты, хороший класс почты PHP, такой как SwiftMailer , позволит вам легко отправлять почту через SMTP.
Скорее всего, конфигурация хоста. Я думаю (но может быть неправильно), что mail () использует команду сервера mail. Поэтому, если у вас нет сервера sendmail / postfix / ssmtp или другого MTA, установленного на сервере, он не сможет работать.
Если они сказали вам обратиться непосредственно к SMTP-серверу, вы должны использовать другую библиотеку, которая реализует SMTP-протокол и класс Mail для создания почты и отправки ее через SMTP напрямую (в классах PEAR или Zend Framework PHP вы обнаружите это)
Вы смотрите на журналы почты. Они отвечают. Тем не менее, вам, вероятно, придется бороться с вашей хостинговой компанией.
Проверьте, разрешено ли веб отправлять почту, передавая getsebool httpd_can_sendmail
с терминала. Если выход
httpd_can_sendmail --> off
дайте https разрешение на отправку почты, setsebool httpd_can_sendmail 1
. У вас должно быть разрешение root для выдачи этих команд.
У меня была аналогичная проблема, и на моем сайте размещался хостинг. Я мог бы выяснить проблему, установив заголовок. Проблема заключалась в следующем:
$ headers. = "From: $ fname \ r \ n";
Вы использовали электронную почту пользователя в поле from. Мой хостинг принимает только электронные письма с моим доменным именем для этого поля. Поэтому я заменил его следующим:
$headers = "From: webmaster@yourdomain.com" ."\r\n" ;
И это устранило проблему! После этого PHP mail () работает отлично.