无法连接到SMTP主机(Could not connect to SMTP host)

2019-07-04 00:24发布

SMTP错误:无法连接到SMTP主机。 消息无法发送。

梅勒错误:SMTP错误:无法连接到SMTP主机。

我似乎无法找到一种方法,令CentOS下PHPMailer的工作。 邮件工作在Windows下就好用XAMPP,但我总是在Linux下这个错误。

SMTP服务器是Lotus Domino的端口25上监听,CentOS的机器有没有防火墙在所有和奇怪的是,即使邮件()不起作用。 它没有返回值(在Windows上返回1)。 如果我通过CentOS的服务器通过telnet发送电子邮件它工作得很好,所以我不认为这是一个网络问题。 它必须与PHP,但我不知道怎么办。

<?php
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "192.168.x.x";
$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方法连接()):

$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;
}

它看起来像它无法打开插座...

UPDATE:使用$ MAIL-> SMTPDebug = 2; 阿尔瓦罗的建议产生这样的输出:

SMTP - >错误:无法连接到服务器:权限被拒绝(13)

Answer 1:

你能使用调试模式SMTPDebug属性,例如:

$mail = new PHPMailer();
// 1 = errors and messages
// 2 = messages only
$mail->SMTPDebug  = 2;

错误信息将被回显到屏幕上。

更新:

使用A 权限被拒绝的错误消息的fsockopen()认为,PHP运行的用户是不允许打开一个套接字。 如果您想再次检查,有没有防火墙,有可能这是一个SELinux的问题 : - ?



Answer 2:

CentOS的6.3操作系统

无法发送电子邮件

后一些RESERCH原来,SELinux的阻塞通信

SELinux的被激活,并且默认配置。 这样的SELinux不允许阿帕奇(httpd的,PHPMailer的)使用sendmail的功能,使任何类型的网络连接。

使用getsebool命令,我们可以检查是否httpd的恶魔被允许进行通过网络的连接,并发送电子邮件。

getsebool httpd_can_sendmail
getsebool httpd_can_network_connect

此命令将返回打开或关闭一个布尔值。 如果它的关闭,我们可以将其设置使用下列内容:

sudo setsebool -P httpd_can_sendmail 1
sudo setsebool -P httpd_can_network_connect 1

现在你可以测试你的php,代码,看看正确与否,如果Sendmail的工作。



文章来源: Could not connect to SMTP host