PHP mail() не отправляет

У меня есть сервер WebFaction и следующий код:

$to = "[email protected]";
$reply_to = "From: " . $_POST['email'];
$name = $_POST['name'];
$subject = "Outreach Request Session for " . $_POST['school'] . " on " . $_POST['date'];

$em = $_POST['message'] . "\n-" . $name;

$sentmail = mail($to, $subject, $em, $reply_to);

$sentmail возвращает true, но письмо по какой-то причине не отправляется.


person vishalkal    schedule 18.06.2014    source источник
comment
Возвращаемое значение true означает только то, что сообщение было принято для доставки сервером. Отсутствие сообщения может означать, что оно попало в спам, сервер неправильно настроен для отправки почты и т. д. Вместо этого вам следует попробовать serverfault.com.   -  person jeroen    schedule 18.06.2014
comment
Если функция PHP mail() возвращает true, проблема не в PHP. Вам следует посмотреть логи вашего почтового сервера. Письмо могло быть и в папке со спамом...   -  person Sverri M. Olsen    schedule 18.06.2014


Ответы (2)


$sentmail возвращает true, но письмо по какой-то причине не отправляется.

Функция mail в PHP просто отправляет почту через MTA (mail агент передачи) на сервере. true может просто означать, что локальный MTA принял его. Но это еще не все, что вам нужно.

Во-первых, действительно ли ваш хостинг-провайдер разрешает исходящую почту? Или сообщения отправляются в виртуальную «черную дыру»?

Теперь предположим, что ваш локальный MTA — скорее всего sendmail — работает, а почта соскочила с сервера и попала в реальный мир. Хорошо, отлично!

Но не так быстро…

Дело в том, что если вы отправляете письмо, это не значит, что принимающая сторона считает письмо действительным. И, скорее всего, принимающая сторона решила, что случайное электронное письмо, отправленное случайным сервером, является просто СПАМом.

Я отправил более подробный ответ здесь, но когда дело доходит до спама, все сводится к следующему: есть ли у вас SPF (Sender Policy Framework) настройка записи для вашего домена? У вас также установлена ​​запись PTR (обратный DNS) для этого домена?

Если у вас нет записи SPF или PTR, вероятность того, что ваше сообщение будет просто помечено как СПАМ, довольно высока.

Если вы серьезно относитесь к отправке почты со своего сервера, вам необходимо, по крайней мере, получить набор записей SPF и PTR.

person Giacomo1968    schedule 18.06.2014

В вашем письме нет заголовков. Хотя они не кажутся обязательными, ваши электронные письма будут заблокированы спамчекерами намного раньше.

Вот пример:

<?php
        $headers = "MIME-Version: 1.0\n" ;
        $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
        $headers .= "X-Priority: 1 (Highest)\n";
        $headers .= "X-MSMail-Priority: High\n";
        $headers .= "Importance: High\n";

 $status   = mail($to, $subject, $message,$headers);
?> 
person NoobishPro    schedule 18.06.2014
comment
говоря, что вы отправляете html-письмо, когда нет, с большей вероятностью вас заблокируют. - person ; 18.06.2014
comment
Это был просто пример того, как использовать заголовки. Стандарт, не более того. Глядя на плакат, я предполагаю, что он знает, что с ним делать. - person NoobishPro; 18.06.2014