Ошибка SMTP: не удалось подключиться к узлу SMTP. Сообщение не может быть отправлено.
Ошибка Mailer: ошибка SMTP: не удалось подключиться к узлу SMTP.
- отправка почты с использованием php и груши на окнах
- PHP: Как отправить электронную почту с вложением с помощью smtp-настроек?
- Ошибка SMTP: не удалось подключиться к SMTP-хосту
- Отказывающийся парсинг электронной почты
- Google App-Gmail Невозможно установить. Gmail, заменяющий адрес при отправке через SMTP-транспорт Swiftmailer (PHP)
Я не могу найти способ заставить PHPMailer работать в CentOS. Почта работает очень хорошо под Windows с XAMPP, но я всегда получаю эту ошибку под Linux.
SMTP-сервер является слушателем Lotus Domino на порту 25, у компьютера CentOS нет никакого брандмауэра, и странно, что даже почта () не работает. Он ничего не возвращает (в то время как в Windows возвращается 1). Если я отправлю электронное письмо через telnet через CentOS-сервер, он работает нормально, поэтому я не думаю, что это сетевая проблема. Это должно быть связано с PHP, но я не знаю, как это сделать.
<?php require("class.phpmailer.php"); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Host = "192.168.xx"; $mail->SMTPAuth = false; $mail->From = "xxx@xxx.it"; $mail->FromName = "XXX"; $mail->AddAddress("xxx@xxx.it"); $mail->IsHTML(true); $mail->Subject = "Test"; $mail->Body = "Test"; if(!$mail->Send()) { echo "Message could not be sent. <p>"; echo "Mailer Error: " . $mail->ErrorInfo; exit; } echo "Message has been sent"; ?>
Просто для уточнения кода выше работает на XAMPP (Windows).
Я отлаживал ошибку на PHPMailer, и здесь происходит ошибка (метод class.smtp.php Connect ()):
$this->smtp_conn = @fsockopen($host, // the host of the server $port, // the port to use $errno, // error number if any $errstr, // error message if any $tval); // give up after ? secs // verify we connected properly if(empty($this->smtp_conn)) { $this->error = array("error" => "Failed to connect to server", "errno" => $errno, "errstr" => $errstr); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF . '<br />'; } return false; }
Похоже, он не может открыть Socket …
UPDATE: использование $ mail-> SMTPDebug = 2; как было предложено Альваро, произвел этот результат:
SMTP -> ОШИБКА: Не удалось подключиться к серверу: разрешено (13)
Вы можете включить режим отладки с SMTPDebug
свойства SMTPDebug
, например:
$mail = new PHPMailer(); // 1 = errors and messages // 2 = messages only $mail->SMTPDebug = 2;
Сообщения об ошибках будут отображаться на экране.
Обновить:
Разрешение, отклоняющее сообщение об ошибке с помощью fsockopen (), указывает на то, что пользовательский PHP работает, так как не разрешено открывать сокет. Если вы дважды проверили, что нет брандмауэра, возможно, это проблема SELinux : -?
ОС CentOS 6.3
Не удалось отправить электронные письма
после того, как некоторые reserch выяснили, что SELinux блокирует связь
SELinux активируется и настраивается по умолчанию. Поскольку SELinux не позволяет Apache (httpd, phpmailer) использовать функцию sendmail и делать какие-либо сетевые подключения.
Используя команду getsebool, мы можем проверить, разрешен ли демон httpd сделать подключение по сети и отправить электронное письмо.
getsebool httpd_can_sendmail getsebool httpd_can_network_connect
Эта команда возвращает логическое значение boolean. Если его выключить, мы можем установить его, используя следующее:
sudo setsebool -P httpd_can_sendmail 1 sudo setsebool -P httpd_can_network_connect 1
Теперь вы можете проверить свой php, код, чтобы увидеть, правильно ли работает SendMail или нет.