У вас здесь две большие проблемы.Давайте разберемся с этим.
$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
, вы сможете видеть любые ошибки и исправлять их.Это также позволит вам узнать, что ваше сообщение было отправлено , что означает, что вы можете связаться с вашим хостинг-провайдером и / или почтовым провайдером, чтобы определить, почему сообщение не было доставлено.