电子邮件不会用 php 发送
Posted
技术标签:
【中文标题】电子邮件不会用 php 发送【英文标题】:Email wont send with php 【发布时间】:2011-08-02 13:57:37 【问题描述】:我正在尝试通过 php 发送电子邮件。我曾尝试发送到 aol 和 hotmail 帐户,但都没有运气。萤火虫也将“已发送邮件”返回给我,所以我不知道问题出在哪里。
$to = '$em';
$subject = "Welcome";
$body = "Hi,\n\nTest";
$mail_sent = @mail($to, $subject, $body);
echo $mail_sent ? "Mail sent" : "Mail failed";
$em 是从数据库中提取的电子邮件地址,我已经检查过,$em 绝对等于电子邮件地址
【问题讨论】:
您检查过 SMTP 日志吗?你有检查过你的垃圾邮件文件夹吗?也不要抑制邮件上的错误。如果出现问题,您需要错误! 您检查过您的hotmail帐户中的垃圾邮件文件夹吗? 我建议从您的mail
呼叫中删除 @
并发布报告的错误消息。
试试吧:mail("whatever@whatever.com", "My Email Test", "Testing 123");看看会发生什么 - 把它归结为基础,让它发挥作用,然后开始变得更复杂。
您是在尝试从本地主机服务器还是从服务器上的页面发送电子邮件?因为据我所知,您无法从 PC 上的本地主机发送电子邮件
【参考方案1】:
这里有两个大问题。让我们分解一下。
$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()
返回真时,就像这里一样,这意味着PHP 认为邮件已发送。
这并不意味着它实际上已发送。 mail()
是一个黑盒子。一旦它认为成功了,邮件就在别处,你没办法查看。
请考虑使用您的网络托管服务提供商的 SMTP 服务器和a modern PHP mail library, like SwiftMailer。 SwiftMailer 使用起来有点复杂,但 is pretty straight-forward 开始工作。 The documentation 很棒。
通过使用不使用mail
的现代邮件库,您将能够在此过程中看到任何错误并进行处理。它还可以让您知道您的消息已发送,这意味着您可以跟进您的托管服务提供商和/或电子邮件提供商,以确定邮件未送达的原因。
【讨论】:
以上是关于电子邮件不会用 php 发送的主要内容,如果未能解决你的问题,请参考以下文章