当前位置: 首页 > 知识库问答 >
问题:

无法连接到SMTP主机

陆畅
2023-03-14

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

邮件程序错误:SMTP错误:无法连接到SMTP主机。

我似乎找不到让PHPMailer在CentOS下工作的方法。邮件在XAMPP的Windows下工作正常,但我总是在Linux下遇到这个错误。

SMTP服务器是一个在端口25上侦听的Lotus Domino,CentOS机器根本没有防火墙,奇怪的是,即使是mail()也不能工作。它不返回任何内容(而在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方法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;
}

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

更新:使用$mail-

SMTP-

共有2个答案

万坚壁
2023-03-14

您可以使用SMTPDebug属性启用调试模式,例如:

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

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

更新:

使用fsokopen()的权限拒绝错误消息表明用户PHP运行为不允许打开套接字。如果你仔细检查没有防火墙,这可能是一个SELinux问题:-?

姚善
2023-03-14

操作系统CentOS 6.3

无法发送电子邮件

经过一些研究,发现SELinux正在阻止通信

默认情况下会激活和配置SELinux。因此,SELinux不允许Apache(httpd、phpmailer)使用sendmail功能并进行任何类型的网络连接。

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

getsebool httpd_can_sendmail
getsebool httpd_can_network_connect

此命令将返回布尔值on或off。如果关闭,我们可以使用以下选项将其打开:

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

现在,您可以测试您的php,代码,看看SendMail是否正常工作。

 类似资料:
  • 问题内容: 以下是我发送邮件的代码: 但是当我运行代码时,它给了我以下异常。 当我ping到它时,它给我的答复没有任何问题。我在用 请帮我解决这个问题。 问题答案: 这是这两行让我感到困扰的问题: 并添加了这一行: 删除并添加以上代码行后,它可以正常工作。

  • 我正在尝试从我的java发送电子邮件,但我无法连接到我的主机。这里是我的代码: 这里是我的代码: 这里又是我的报告错误: 有人能帮帮我吗?:(

  • 当我从服务器发送电子邮件时,它会给我两个错误- SMTP错误:无法连接到SMTP主机。无法发送邮件。邮件错误:SMTP错误:无法连接到SMTP主机。 我在另一个关于堆栈溢出的答案上找到了很多提示,但都不起作用。我试过465/587/65号端口。如果我设置端口587,下面的代码在本地系统上也能正常工作。但在服务器中,它不起作用。

  • 我正在处理一封使用phpmailer类的Web邮件。问题是我收到错误“SMTP错误:无法连接到SMTP主机。邮件未发送PHP邮件错误:SMTP错误:无法连接到SMTP主机。” 我的代码是: 有人想让我知道我错在哪里,我需要你对这个问题的关注。

  • 这是我用来发送电子邮件的代码: javax.mail.MessagingException:无法连接到SMTP主机:SMTP.gmail.com,端口:465; 嵌套异常为: java.net.connectException:连接被拒绝 在com.sun.mail.SMTP.smtpransport.openserver(smtpransport.java:1961) 在com.sun.mail

  • 我在windows server 2008 R2上遇到以下错误,并且在我的防火墙入站规则上启用了: 请救命!!