2012-11-21 201 views
10

SMTP Error: Could not connect to SMTP host. Message could not be sent.无法连接到SMTP主机

Mailer Error: SMTP Error: Could not connect to SMTP host.

我似乎无法找到一种方法,使CentOS的下PHPMailer的工作。 Mail在XAMPP下的Windows下工作得很好,但是我总是在Linux下得到这个错误。

SMTP服务器是监听端口25的Lotus Domino,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 = "[email protected]"; 
$mail->FromName = "XXX"; 
$mail->AddAddress("[email protected]"); 
$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; 
} 

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

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

SMTP -> ERROR: Failed to connect to server: Permission denied (13)

+2

您是否试过指定登录凭据? –

+0

没有。这是什么意思?你的意思是把它们设置为“”? – raz3r

+0

FYI tryed '$ mail-> SMTPAuth = true; $ mail-> Username =“”; $ mail-> Password =“”;' 刚才,没有运气。 – raz3r

回答

10

可以实现与SMTPDebug财产调试模式,例如:

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

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

更新:

使用fsockopen()一个权限被拒绝错误信息表明用户PHP运行作为不允许打开一个套接字。如果你仔细检查过没有防火墙,那可能是SELinux problem: - ?后一些RESERCH原来,SELinux的阻塞通信

SELinux的被激活,并且默认配置

+1

很好的抓住这里,现在它给这个错误'SMTP - >错误:无法连接到服务器:权限被拒绝(13)'。它可以与Linux用户的权限相关吗? – raz3r

+2

你是一个天才,我使用了我在你的链接中找到的命令,它工作。所以IT毕竟是一个网络相关的问题。那么现在我知道如果我将来会有同样的错误该怎么办!谢谢大家,感谢大家的帮忙;) – raz3r

30

OS的CentOS 6.3

无法发送电子邮件

。因为这样的SELinux不允许Apache(httpd,phpmailer)使用sendmail函数并进行任何类型的网络连接。

使用getsebool命令,我们可以检查是否允许httpd demon通过网络建立连接并发送电子邮件。

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是否正常工作的代码。

+0

谢谢,解决了问题 – Piyuesh

+0

你今天是我的英雄。 –

+0

你先生救了我。我还想指出的是,在某些版本的CENTOS上,setsebool命令可能会运行一些慢,因此在运行命令时请耐心等待。 – JoeMoe1984

相关问题