电子邮件不会用 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 发送的主要内容,如果未能解决你的问题,请参考以下文章

PHP 电子邮件不会发送到我的电子邮件

使用 jQuery AJAX PHP 的表单不会在电子邮件中发送字段输入

如何确保我不会从 php 的测试站点向客户发送任何电子邮件

php : 电子邮件发送失败,附件不止一个

如何在php用mail发送邮件

梨邮件功能密件抄送不会发送