Не удалось подключиться к хосту SMTP.

Ошибка SMTP: не удалось подключиться к узлу SMTP. Сообщение не может быть отправлено.

Ошибка Mailer: ошибка SMTP: не удалось подключиться к узлу SMTP.

Я не могу найти способ заставить 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 или нет.