Назад | Перейти на главную страницу

Ошибка подключения SMTP () при запросе из браузера

У меня есть 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();

Буду признателен за любую помощь. Спасибо.

EDITED: мне удалось решить проблему «Модуль 'curl', уже загруженный в Неизвестно в строке 0». На сервере было 2 файла PHP.ini, которые вызывали проблему. Переименование одного PHP.ini решило проблему с загрузкой curl.

Но все же я не могу отправлять электронную почту, не используя ни одного пользователя. Однако я могу отправлять электронную почту, используя пользователя root.

Я заметил в WHM настройку «Запретить« никому »отправлять почту». По умолчанию это означает, что никому не разрешено отправлять электронную почту. Итак, если я отключу его, я смогу отправлять электронную почту, не используя никого. Но не уверен, почему после его выключения я все еще не могу отправлять электронную почту, используя никого.

EDITED: когда я проверил журналы сервера apache, я обнаружил ниже ошибку, генерируемую для каждого запроса, поступающего из браузера. Не уверен, что это за ошибка. Я изучаю это. Буду признателен, если кто-нибудь знает об этой проблеме. Спасибо! ****************** ЖУРНАЛ ОШИБОК ***************************** * [Вт 20 декабря, 12:38: 45.875892 2016] [ssl: error] [pid 913] (101) Сеть недоступна: [client 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.

Путь для изменения настроек.

WHM -> Конфигурация сервера -> Настройки настройки -> Под вкладкой Почта

По умолчанию ниже два параметра были включены. Когда я их отключил, это позволило мне отправлять электронную почту от никого не пользователя.

  1. Ограничить исходящий SMTP для root, exim и mailman (настройка FKA SMTP)

  2. Запретить «никому» отправлять почту

Надеюсь, кому-то это поможет. С уважением!

Вы запускаете 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

Чтобы включить разрешение.