Письмо не будет отправлено с php - PullRequest
0 голосов
/ 10 апреля 2011

Я пытаюсь отправить письмо через php.Я попытался отправить в учетные записи aol и hotmail, но мне не повезло.Также firebug возвращает мне «письмо отправлено», так что я не знаю, в чем проблема.

 $to = '$em';
 $subject = "Welcome";
 $body = "Hi,\n\nTest";
 $mail_sent = @mail($to, $subject, $body);
 echo $mail_sent ? "Mail sent" : "Mail failed";

$ em - это адрес электронной почты, полученный из базы данных, и я проверил, а $ em демонстративно равен электронной почтеадрес

1 Ответ

3 голосов
/ 10 апреля 2011

У вас здесь две большие проблемы.Давайте разберемся с этим.

$to = '$em';

Переменные не интерполируются внутри строк в одинарных кавычках .Если вам нужно присвоить $to значению внутри $em, то отбросьте кавычки: $to = $em;

$mail_sent = @mail($to, $subject, $body);
echo $mail_sent ? "Mail sent" : "Mail failed";

@ является оператором подавления ошибок .Использовать его - плохая практика, потому что он не дает PHP сообщить, что что-то идет не так.Отбросьте это.

Не то, чтобы здесь помогало подавление ошибок, поскольку mail() является функционально задержанным и , на самом деле никогда не жалуется когда что-то может пошло не так.

Также firebug возвращает мне "письмо отправлено", поэтому я не знаю, в чем проблема.

Когда mail() возвращает true, как здесь, это означает, что PHP думает , что письмо было отправлено.

Это не значит, что на самом деле было отправлено.mail() - это черный ящик.Как только он сочтет, что получилось успешно, почта находится где-то еще, и у вас нет возможности проверить ее.

Пожалуйста, обратите внимание на использование SMTP-сервера вашего веб-хостинга и современной почтовой библиотеки PHP, такой как SwiftMailer .SwiftMailer немного сложнее в использовании, но довольно прост , чтобы начать работать. Документация превосходна.

Используя современную почтовую библиотеку, в которой не используется mail, вы сможете видеть любые ошибки и исправлять их.Это также позволит вам узнать, что ваше сообщение было отправлено , что означает, что вы можете связаться с вашим хостинг-провайдером и / или почтовым провайдером, чтобы определить, почему сообщение не было доставлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...