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();

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

ИЗМЕНИТЬ: Мне удалось решить проблему «Модуль '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: респондент ошибка


Спасибо за вашу помощь!

1
задан 20 December 2016 в 14:52
2 ответа

Наконец, мне удалось отправить электронное письмо от никого из пользователей моей Cent OS. Мне пришлось отредактировать две настройки из WHM.

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

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

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

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

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

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

1
ответ дан 3 December 2019 в 20:31

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

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

1
ответ дан 3 December 2019 в 20:31

Теги

Похожие вопросы