PHP的mail()函数停止工作了。

3
我一直在使用MAMP解决方案栈(v2.0.5)开发Web应用程序,其中包括:
  • Mac OS X(v10.7.3)
  • Apache v2.2.21
  • MySQL v5.5.9
  • PHP v5.3.6
我一直在使用PHP mail() 函数向新注册的用户帐户发送激活URL:
$body = "Thank you for registering. To active your account, please click on this link:\n\n";
$body .= BASE_URL . 'activate.php?x=' . urlencode($e) . "&y=$a" . "&z=$bs";
mail($trimmed['email'], 'Registration Confirmation', $body, 'From: admin@tester.com');

然而,似乎过了一段时间后……这种情况就停止了,现在我无法收到任何这些消息发送给我的测试用户账户。

我的php.ini文件位于:/Applications/MAMP/bin/php/php5.3.6/conf/php.ini

使用默认设置:

[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =

它以前一直完美运行,但最近失败了。我没有故意更改任何设置,我不知道可能会导致它停止。
经过大量搜索和阅读,似乎您必须设置SMTP服务器才能从本地主机发送电子邮件到另一个电子邮件地址,以使其完全正常工作,但我非常确定它以前可以工作,我收到了电子邮件...真的!
我希望有人能帮助。非常感谢。
更新-已解决: 基本上解决了。开始尝试使用PEAR和Mail插件,但发现很糟糕。最终使用外部SMTP服务器和PHPMailer,效果更好。
有用信息: http://www.askapache.com/php/phpfreaks-eric-rosebrocks-phpmailer-tutorial.html https://orangsetya.wordpress.com/2007/09/12/send-mail-using-smtp-authentication-phpmailer-script

1
你必须使用某个服务器作为中继(在你的情况下是本地主机)来发送电子邮件。也许该服务器因垃圾邮件而被列入黑名单了? - Jovan Perovic
1
你有检查过垃圾邮件吗?我在一个EC2实例上遇到了这个问题 - 创建SPF DNS记录解决了这个问题。 - John Himmelman
当你说中继服务器时,你是指我的 Mac 上的某个 SMTP 服务器最初作为通过本地主机发送这些电子邮件的手段?现在可能已经被目标邮件服务器列入黑名单了吗? - leokennedy
1
根据你的更新,我想加入我的意见。PEAR很烂。我尽量避免使用它。 - Mike Purcell
我完全同意!我在使用过程中遭受了无法控制的错误信息之苦:http://pear.php.net/bugs/bug.php?id=9950 - leokennedy
2个回答

1

创建一个新的脚本,使用邮件命令并将值硬编码为字符串,以查看是否收到电子邮件。还要检查您的操作系统是否有任何更新对您的apache/php安装进行了修改。

尝试像这样的简单脚本:

<?php
    mail('youremail@example.com', 'My Subject', 'My Message');
?>

由于我一直在使用MAMP环境,因此我认为Mac OS X更新时既没有更新也没有更改Apache或PHP。我已经重新安装了MAMP(非Pro版本),但没有任何改变。我还使用了之前备份的旧脚本,但它们也无法工作,电子邮件发送到两个不同的目标域。 - leokennedy

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接