У меня есть сценарий PHP, который отправляет электронную почту с помощью библиотеки PHPMailer. Когда я запускаю сценарий в SSH с помощью команды PHP, он отлично отправляет электронную почту. Но когда запрос на тот же сценарий поступает из браузера, он не работает и дает ошибку ниже.
2016-12-17 19:41:24 SMTP ERROR: Failed to connect to server: (0) 2016-12-17 19:41:24 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting error
Я не уверен, почему он не работает для запросов браузера.
Мой сценарий находится на AWS, и я использую корпоративную электронную почту Google.
Ниже приведен фрагмент моего кода.
require_once 'PHPMailer-master/PHPMailerAutoload.php';
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->IsHTML(true);
$mail->CharSet = "text/html; charset=UTF-8;";
$mail->SMTPDebug = 2;
$mail->SMTPSecure = 'ssl';
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
$mail->Username = "google email address";
$mail->Password = "password";
$mail->From = $email_from;
$mail->FromName = "Name";
$mail->AddAddress($to);
$mail->Subject = $subject;
$mail->Body = $message;
$sent = $mail->Send();
Буду признателен за любую помощь . Спасибо.
ИЗМЕНИТЬ: Мне удалось решить проблему «Модуль 'curl', уже загруженный в Неизвестный в строке 0». На сервере было 2 файла PHP.ini, которые вызывали проблему. Переименование одного PHP.ini решило проблему с загрузкой curl.
Но я все равно не могу отправлять электронную почту, не используя ни одного пользователя. Однако я могу отправлять электронную почту, используя пользователя root.
Я заметил конфигурацию в WHM для «Запретить« никому »отправлять почту». По умолчанию это означает, что никому не разрешено отправлять электронную почту. Итак, если я выключу его, я смогу отправлять электронную почту, не используя никого. Но не знаю, почему после его выключения я все еще не могу отправлять электронную почту, используя none.
EDITED: Когда я проверил журналы сервера apache, я обнаружил, что ниже генерируется ошибка для каждого запроса, исходящего из браузера. Не уверен, что это за ошибка. Я занимаюсь этим исследованием. Буду признателен, если кто-нибудь знает об этой проблеме. Благодарю вас! ****************** ЖУРНАЛ ОШИБОК ***************************** * [Вт 20 декабря, 12: 38: 45.875892 2016] [ssl: error] [pid 913] (101) Сеть недоступна: [клиент xx.xx.xx.xx: 151] AH01974: не удалось подключиться к ocsp респондента OCSP. comodoca.com ' [Вт 20 декабря, 12:38: 45.875929 2016] [ssl: error] [pid 913] AH01941: stapling_renew_response: ошибка респондента [Вт, 20 декабря, 12:38: 46.181171 2016] [ssl: error] [pid 919] (101) Сеть недоступна: [клиент xx.xx.xx.xx: 848] AH01974: не удалось подключиться к ocsp респондента OCSP. comodoca.com ' [Вт 20 декабря, 12:38: 46.181211 2016] [ssl: error] [pid 919] AH01941: stapling_renew_response: респондент ошибка
Спасибо за вашу помощь!
Наконец, мне удалось отправить электронное письмо от никого из пользователей моей Cent OS. Мне пришлось отредактировать две настройки из WHM.
По умолчанию две настройки ниже были включены. Когда я их выключил, это позволило мне отправлять электронную почту никому.
Ограничить исходящий SMTP для root, exim и mailman (FKA SMTP Tweak)
Запретить никому отправлять почту
Надеюсь, что кто-то сможет получить от этого выгоду. С уважением!
Вы запускаете php как root через ssh? Или другой пользователь с более высокими разрешениями, чем веб-сервер?
Если вы знаете, от имени какого пользователя работает веб-сервер, попробуйте запустить php-скрипт от имени этого пользователя. Вы можете использовать phpinfo ()
, чтобы узнать, от имени какого пользователя он запущен. Один из способов запуска сценария от имени этого пользователя заключается в следующем ...
Сначала используйте root или пользователь, который может выполнять sudo
, и введите следующее, чтобы перейти к пользователю веб-сервера:
sudo -u www-data bash
Очевидно, замените www-data
на имя пользователь веб-сервера, если он другой, и bash
с действующей оболочкой на вашем сервере, если у вас нет bash. Если у вас есть приглашение bash пользователя веб-сервера, запустите id
, чтобы убедиться, что вы действительно являетесь правильным пользователем, а затем попробуйте запустить свой PHP-скрипт из командной строки этого пользователя. Если он дает ту же ошибку, значит, это проблема с разрешениями. Если это работает, то, по крайней мере, вы исключили это!
Если это действительно проблема с разрешениями, попробуйте следующее:
sudo setsebool -P httpd_can_sendmail 1
sudo setsebool -P httpd_can_network_connect 1
Чтобы включить разрешение.