2011-04-10 89 views
0

我想通过PHP发送电子邮件。我曾尝试发送到aol和hotmail帐户,但没有任何运气。另外萤火虫回来了我的“邮件发送”,所以我不知道问题是什么。电子邮件将不会发送与PHP

$to = '$em'; 
$subject = "Welcome"; 
$body = "Hi,\n\nTest"; 
$mail_sent = @mail($to, $subject, $body); 
echo $mail_sent ? "Mail sent" : "Mail failed"; 

$ EM是从数据库中提取电子邮件地址,我已经确认并$ EM是挑衅等于一个电子邮件地址

+1

您是否检查过SMTP日志?你有检查过你的垃圾邮件文件夹吗?也不要禁止邮件上的错误。如果出现问题,你需要错误! – Khez 2011-04-10 17:41:15

+0

你检查过你的hotmail帐户中的垃圾邮件文件夹吗? – 2011-04-10 17:41:54

+3

我建议从'mail'调用中删除'@'并发布报告的错误消息。 – 2011-04-10 17:42:46

回答

3

您这里有两个大问题。让我们分解它。

$to = '$em'; 

变量不插入single-quoted strings内部。如果您需要分配$to里面$em值,则沟报价:$to = $em;

$mail_sent = @mail($to, $subject, $body); 
echo $mail_sent ? "Mail sent" : "Mail failed"; 

The @ is an error silencing operator。使用它是不好的做法,因为它阻止PHP让你知道什么时候出错。抛弃它。

不就是抑制错误在这里帮助,为mail() is functionally retarded实际上从未抱怨当事情威力出了纰漏。

此外萤火虫正在返回我“邮件发送”,所以我不知道问题是什么。

mail()返回true,因为它在这里,这意味着PHP 认为该邮件发送。

这并不意味着它实际上发送。 mail()是一个黑匣子。一旦它认为它成功了,邮件就在别的地方,你无法检查它。

请考虑使用您的虚拟主机提供商的SMTP服务器和a modern PHP mail library, like SwiftMailer。 SwiftMailer使用起来稍微复杂一点,但是is pretty straight-forward可以正常工作。 The documentation非常好。

通过使用不使用mail的现代邮件库,您将能够看到沿途的任何错误并处理它们。它还会使您知道您的消息已发送,这意味着您可以跟进您的托管服务提供商和/或电子邮件提供商,以确定邮件未送达的原因。