Я не могу отправить электронное письмо с помощью PHP mail (). Я также пробовал PHPMailer и Swiftmail без успеха. Однако следующая команда на сервере успешно отправляет почту.
cat test.txt | mail -s "test mail" my@email.com
Есть ли способ отслеживать, откуда возникает проблема? mail () просто возвращает true или false.
На PHP> = 5.2 существует error_get_last()
для возврата любой ошибки, error_get_last()
последним вызовом функции. Есть подробная информация о том, как получить эквивалентную информацию из более старых версий PHP на связанной странице.
Что касается PHPMailer, существует свойство $mailer->ErrorInfo
которое содержит последнюю ошибку. SwiftMailer должен иметь что-то подобное. Скорее всего, если почта работает из командной строки, но не из PHP или библиотек рассылки, происходит неправильная конфигурация. Я предполагаю, что ваш хост не имеет настроенного параметра PHP sendmail_path
.
Включите все ошибки, предупреждения и уведомления с помощью error_reporting (E_ALL). Иметь ошибки куда-то полезными или регистрировать обратный вызов, который делает некоторые полезные вещи.
Тогда вы увидите, что происходит. Обработка ошибок PHP бесполезна по умолчанию (и ее значения по умолчанию различны во всем мире, поэтому вам необходимо переопределить их на практике).
По всей вероятности, он настроен на выполнение SMTP на localhost, с которым ваш MTA не разрешает ретрансляцию. Измените его конфигурацию, чтобы вместо этого использовать sendmail, или исправьте MTA, чтобы разрешить ретрансляцию с localhost.