PHP 邮件返回 true,但没有发送电子邮件 - “连接被 [127.0.0.1] 拒绝”

Aar*_*ron 2 php email smtp sendmail

我正在使用 Redhat Linux 服务器。几个月前,我用 PHP5 编写了一个简单的用户注册系统,使用电子邮件作为验证。我记得当时它正在工作。然而,最近测试系统后,我发现电子邮件实际上并未发送(我尝试了来自不同域的几个电子邮件地址,并检查了垃圾邮件文件夹)。

作为测试用例,我尝试了下面的简单代码(使用我的实际电子邮件地址作为 $to):

<html>
<head>
<title>Sending email using PHP</title>
</head>
<body>
<?php
   $to = "myemail@gmail.com";
   $subject = "Subject";
   $message = "Message";
   $header = "From:webmaster@mydomain.com \r\n";
   $header .= "MIME-Version: 1.0\r\n";
   $header .= "Content-type: text/html\r\n";
   $ret = mail ($to,$subject,$message,$header);
   if( $ret == true )  
   {
      echo "Message sent successfully.";
   }
   else
   {
      echo "Message could not be sent.";
   }
?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

它回显“消息发送成功”。我还尝试使用PHPMailer,它给出了一条成功的消息(我相信他们的实现也使用了 mail() 函数)。

查看php.ini,有以下内容:

[mail function]
SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i
Run Code Online (Sandbox Code Playgroud)

我不太熟悉 SMTP 服务器的工作原理。我可以采取哪些步骤来解决此问题?这只是联系服务器管理员的问题还是我可以自己更改一些内容(我有 root 访问权限)?

编辑:
根据 Andrzej 的建议,我检查了邮件日志文件,并在最近的尝试中找到了这两行(我替换了我的服务器名和电子邮件):

3 月 11 日 17:11:30 myservername sendmail[23240]:s2BLBU2x023240:from=apache,size=149,class=0,nrcpts=1,msgid=<201403112111.s2BLBU2x023240@myservername.com>,relay=apache@localhost

3 月 11 日 17:11:30 myservername sendmail[23240]:s2BLBU2x023240:to=myemail,ctladdr=apache (48/48),delay=00:00:00,xdelay=00:00:00,mailer=relay,pri= 30149,中继=[127.0.0.1] [127.0.0.1],dsn=4.0.0,stat=延迟:连接被[127.0.0.1]拒绝

AnF*_*nFi 5

延迟:连接被 [127.0.0.1] 拒绝

现代 sendmail 使用 SMTP 连接到 127.0.0.1:25 将消息中继到以 root 身份运行的本地 sendmail 守护进程。这样做是为了避免安装 sendmail 作为设置 root uid 程序的安全风险。

您的计算机上似乎尚未(成功)启动 sendmail 守护程序/服务。Sendmail 应向日志文件报告启动失败及其原因。

看来该service sendmail restart命令在 redhat 上启动了 sendmail。