Почему не удается отправить почту на 000WebHost с помощью PHP?

Вопрос или проблема

Я создал небольшой проект на PHP на 000WebHost. Система, которую я настроил, отправляет письмо пользователю, если он/она забывает пароль для его сброса. Но проблема в том, что она вообще не может отправить письмо.

Вот мой код на PHP:

$tomail=$_POST["usermail"];
$subject="Password Reset";
$headers="MIME-Version: 1.0" . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'To: '.$tomail."\r\n";
$link="https://dhankosh-in.000webhostapp.com/reset_password.php";
$message="<html><head></head><body><p>Нажмите на ссылку ниже, чтобы сбросить свой пароль</p><br><br><a href="https://superuser.com/questions/1465996/".$link."">Нажмите здесь, чтобы сбросить пароль</a></body></html>";
if(mail($tomail,$subject,$message,$headers))
{
    $myobj=array('status'=>'success','message'=>'Проверьте вашу почту для сброса пароля!!');
    echo json_encode($myobj);
}
else{
    $myobj=array('status'=>'error','message'=>'Недопустимый email!!');
    echo json_encode($myobj);
}

Он отправляет ответ как «Проверьте вашу почту для сброса пароля!!», но я не получаю никакого письма.

Я пробовал ваш код, и он работал. (Я изменил первую строку на фиксированный адрес электронной почты).

Включите sendmail в панели управления (если он выключен)

Настройки сайта > Общие > Sendmail

Имейте в виду, что бесплатный аккаунт ограничен 50 письмами в день.

Этот ответ очень поздний, но все еще актуален…

Проверьте у вашего веб-хостинга, 000WebHost, так как они могли отключить функциональность PHPMail(), поскольку это основной вектор для спама/вредоносных программ.

Многие провайдеры веб-хостинга отключили PHPMail() по этой причине.

Ответ или решение

Отправка электронной почты с помощью PHP на платформе 000WebHost может столкнуться с рядом проблем, что приводит к невозможности отправки сообщений. В этом ответе мы подробно рассмотрим основные причины, почему так может происходить, и предложим решения.

Теория

Отправка электронной почты с помощью PHP традиционно выполняется через функцию mail(). Однако существует ряд ограничений и потенциальных проблем, которые могут возникнуть при использовании этого метода, особенно на бесплатных хостинг-платформах, таких как 000WebHost. Основные причины, по которым функция может не работать, включают:

  1. Ограничения хостинга: Многие бесплатные хостинги, включая 000WebHost, накладывают ограничения или полностью блокируют использование PHP-функции mail() для предотвращения спама. Это особенно верно для бесплатных аккаунтов, которые могут быть более подвержены злоупотреблениям.

  2. Проблемы с конфигурацией: PHP-функция mail() зависит от правильной настройки сервера, включая наличие и конфигурацию программы sendmail. Если sendmail отключен или неправильно настроен, письма не будут отправляться.

  3. SMTP и безопасность: Современные стандарты безопасности накладывают требования на использование SMTP-серверов вместо прямого вызова mail(), так как это позволяет упрощенно идентифицировать отправителя и установить безопасное соединение.

Пример

Предположим, что ваш код выполняется при входе пользователя для восстановления пароля. Вы можете использовать следующий код:

$to = $_POST['usermail'];
$subject = 'Password Reset';
$headers = "MIME-Version: 1.0\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1\r\n';
$headers .= 'To: '.$to."\r\n";
$link = "https://dhankosh-in.000webhostapp.com/reset_password.php";
$message = "<html><head></head><body><p>Click on the link below to reset your password</p><br><br><a href=\"$link\">Click here to reset your password</a></body></html>";

if(mail($to, $subject, $message, $headers)) {
    $response = array('status' => 'success', 'message' => 'Check your mail to reset password!!');
} else {
    $response = array('status' => 'error', 'message' => 'Invalid e-mail!!');
}
echo json_encode($response);

Применение

Чтобы заставить ваш скрипт корректно отправлять письма, можно применить следующие рекомендации:

  1. Проверка конфигурации хостинга:

    • Убедитесь, что sendmail активирован в панеле управления на 000WebHost. Это можно сделать, перейдя в: Настройки сайта > Общие > Sendmail.
    • Проверьте лимиты вашего аккаунта. На бесплатных аккаунтах 000WebHost существует ограничение в 50 писем в день.
  2. Использование SMTP:

    • Вместо использования mail(), рассмотрите возможность применения библиотеки PHPMailer или аналогичной, которая позволяет отправлять письма через SMTP. SMTP обеспечивает более стабильную и безопасную отправку, а также позволяет обходить ограничения, накладываемые хостингом.
    • Настройте SMTP-сервер, используя, например, SMTP Google (Gmail), указав нужные параметры: адрес сервера, порт, метод авторизации и учетные данные.
  3. Тестирование и логирование:

    • Добавьте логирование в ваш скрипт для отслеживания возможных ошибок при отправке. Это поможет быстро выявить, на каком этапе происходит сбой.
    • Проверьте все входные данные от пользователей, чтобы удостовериться, что электронные адреса обрабатываются корректно, и нет ошибок в формате.
  4. Связь с поддержкой 000WebHost:

    • Если проблема сохраняется, и вы проверили все настройки, имеет смысл обратиться в техническую поддержку 000WebHost. Они могут предоставить подробности о том, почему отправка может блокироваться, и что можно сделать для решения этой проблемы.

Заключение

Отправка почты через PHP на хостингах, таких как 000WebHost, требует учета ряда факторов, начиная от настройки сервера до правильного использования современных библиотек. С переходом на SMTP и тщательной настройкой вы сможете успешно отправлять электронные письма пользователям. Эти меры помогут сократить количество проблем и улучшить надежность вашего приложения для пользователей.

Оцените материал
Добавить комментарий

Капча загружается...