2012-12-08 323 views
-2

我只是想知道是否有人在这里看到任何错误,代码执行,但我从来没有收到电子邮件,有什么建议吗?php电子邮件没有发送

$to = $_POST['to_email']; 
$subject = $_POST['subject']; 
$message='<p><b>Message:</b> '.str_replace("\n.", "\n..", $_POST['message']).'</p>'; 

$headers = "From: " . strip_tags($_POST['from_email']) . "\r\n"; 
$headers .= "Reply-To: ". strip_tags($_POST['from_email']) . "\r\n". 
     'X-Mailer: PHP/' . phpversion(); 

mail($to, $subject, $message, $headers); 
+0

检查您的垃圾邮件文件夹。 –

+0

检查你的/var/log/mail.log或/ var/log/syslog文件。可能是你的mta给你更多的信息。 – dAm2K

+0

你是否尝试过直接使用sendmail(或者你已经安装的任何mta)?您的系统可能配置错误/缺少MTA。 –

回答

0

这将取决于PHP的安装。

PHP可以做很多事情 - 最常见的是将电子邮件排队到本地邮件服务器(在Linux上常见,在Windows上则不太常见),或者与外部邮件中继交谈并将邮件排队(通常需要认证,除非它是罕见的开放中继)。写入文件也是可以的。

所有那mail()功能保证,如果没有警告是电子邮件已排队到php.ini文件中指定的位置。

做的第一件事是检查邮件报告成功...

$Success = @mail($to, $subject, $message, $headers); 
if(!$Success) { 
    print "Failed to queue email"; 
} 

你需要做的下一件事就是检查你的php.ini的配置,看看邮件是如何配置的。确保它使用正确的凭据指向有效的邮件服务器。如果你在Linux和使用本地邮件服务器一样postfix,检查它的运行(像/etc/init.d/postfix status取决于你的发行版)

正如@FlorianKasper提到,SMTP作为一个选项仅在Windows上使用。如果您可以明确说明您正在使用的操作系统,我们可能会进一步提供帮助。

+0

SMTP ini sais的SMTP:;只有Windows在基于unix的系统上,您必须使用sendmail/something simmilar命令 http://php.net/manual/de/mail.configuration.php#ini.smtp –

+0

这是真的,但我没有看到它使我的答案不正确? OP没有指定操作系统,如果你安装了一个例如[xmailserver](http://www.xmailserver.org/) – Basic

+0

,那么它也可以在Windows上使用本地邮件服务器,如果你觉得攻击 –

1

mail()函数只是使用sendmail unix/linux命令发送邮件。如果它是错误的配置,它不会工作

如果你有你的PHP访问INI检查出的[邮件]部分

smtp = SMTPSERVER (windows) 
smtp_port = 25 (Windows) 
sendmail_path= (unix)