2009-09-13 133 views
0

我已经成功地使用PHP的mail()函数发送邮件,并且为了我的密码重置通知电子邮件,我复制了我在其他地方使用的语法,但是我想我搞砸了,因为它没有到达目的地。这里是我使用的代码:PHP邮件没有发送 - 标头设置不正确?

$headers = 'To:'.$email."\r\n"; 
$headers .= 'From: [email protected]'."\r\n"; 
$to = $email."\r\n"; 
$subject = 'AromaClear Password Reset Notification'. "\r\n"; 
$msg = 'From: AromaClear'."\r\n"; 
$msg .='Subject: Your New Password'. "\r\n"; 
$msg .= 'Message: Your new password is '.$newpass."\r\n"; 
$msg.= 'If you have received this e-mail in error, please ignore it.'. "\r\n"; 

mail($to, $subject, $msg, $headers); 

有什么想法?

回答

3

试着看看你的服务器的邮件日志,看看它为什么没有得到转发。例如,这个服务器的sendmail可能需要From头的-f标志,而不是在头文本中指定它。

mail($to, $subject, $msg, $headers, "-f $from"); 

此外,你似乎做了很多额外的/奇怪的工作。这很容易:

$subject = "AromaClear Password Reset Notification"; 
$headers = "From: [email protected]"; 
$msg = "Your new password is $newpass\r\nIf you have received this e-mail in error, please ignore it.\r\n."; 

if(mail($email, $subject, $msg, $headers)) 
{ 
    //handle success 
} 
else 
{ 
    //handle failure 
} 

改变你的喜好的风格。

+0

我改变了代码,并添加了一个不同的键值对查询字符串取决于成功或失败,它似乎已通过(我也加入了可选的-f参数),但我仍然不收到电子邮件。已经检查过数据库,电子邮件地址和用户名是正确的,因为他们已经进行了数周的测试)。依然没有。奇怪。 – user97410 2009-09-13 18:54:58

+0

然后我的猜测是堆栈里的东西越来越低。你真的需要看看你的系统的邮件日志(通常是/ var/log/mail),看看邮件是否被推送。如果你没有看到你的邮件出现,那么PHP可能被错误地配置为sendmail(而不是指向sendmail所在的位置?)。也许你的sendmail配置错误?也许你的ISP阻止SMTP中继? – 2009-09-13 19:04:53

+0

我已经从同一台服务器成功发送邮件,这是什么让这特别奇怪。事实上,我今天早些时候发过一些邮件,而且我还有另一个脚本可以工作,发送一个大的HTML编码邮件和我在这里发布的原始语法(除了$ msg只是一个巨大的CSS和HTML字符串)。 – user97410 2009-09-13 19:06:21

1

这看起来好像没什么问题,也许做

if (mail($to_email,$subject,$message, $headers)) 
    echo 'Success'; 
else 
    echo 'Error'; 
} 

这可能让你知道,如果它试图在所有发送。

2

你检查了mail()的返回值吗?如果它不是FALSE,那么它被接受用于交付,并且代码很好,但是其他地方出现了一些问题。

1

只是不要在任何地方添加“\ r \ n”,只能用它来分隔标题。 在消息中,您只能使用\ n,它将起作用。 在主题和接收者的结尾处,不需要“\ r \ n”。