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

时间:2014-03-11 21:26:53

标签: 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>

它回应&#34;消息已成功发送&#34;。我也尝试使用PHPMailer,它给出了一个成功的消息(我相信它们的实现也使用了mail()函数)。

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

[mail function]
SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i

我对SMTP服务器的工作原理并不熟悉。我可以采取哪些步骤来解决此问题?这只是联系服务器管理员的事情,还是我可以改变自己的东西(我有root访问权限)?

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

  

Mar 11 17:11:30 myservername sendmail [23240]:s2BLBU2x023240:   from = apache,size = 149,class = 0,nrcpts = 1,   MSGID = LT; 201403112111.s2BLBU2x023240@myservername.com> ;,   中继=阿帕奇@本地

     

Mar 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,relay = [127.0.0.1] [127.0.0.1],dsn = 4.0.0,   stat =延期:[127.0.0.1]

拒绝连接

2 个答案:

答案 0 :(得分:4)

延期:[127.0.0.1]

拒绝连接

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

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

似乎service sendmail restart命令在redhat上启动sendmail。

答案 1 :(得分:0)

尝试使用SMTP邮件,看看是否有效,而不是使用mail / sendmail。可能是您的sendmail没有在您的服务器上正确设置。

使用PHPMailer SMTP(参见示例):

http://phpmailer.worxware.com/index.php?pg=examplebsmtp