我在LAMP环境中处理一个发送大量电子邮件通知的系统。我想要一种方法来阻止PHP在我的开发环境中发送实际的电子邮件。现在,我正在评论所有的mail()行,但这开始引起QA人员下游的混乱,因为他们正在删除注释掉的行并将它们推送给测试人员。
任何简单的方法都可以在PHP中禁用sendmail而不会抛出错误?
答案 0 :(得分:3)
您还可以设置一个像here描述的小型PHP脚本,将邮件写入var/log/mails
:
#!/usr/bin/php
<?php
$input = file_get_contents('php://stdin');
preg_match('|^To: (.*)|', $input, $matches);
$filename = tempnam('/var/log/mails', $matches[1] . '.');
file_put_contents($filename, $input);
将脚本放在/usr/local/bin/sendmail
中,使其可执行并放行
sendmail_path = /usr/local/bin/sendmail
在php.ini
答案 1 :(得分:2)
您的问题的另一个解决方案是将本地后缀设置为本地传递。每封电子邮件都会发送到您当地的电子邮箱帐户!
https://serverfault.com/questions/137591/postifx-disable-local-delivery
答案 2 :(得分:2)
答案 3 :(得分:1)
为什么不使用像以下一样的Mailerclass:
class MyMailer {
private static $is_development_state = true;
public static function mail(...) {
if (self::$is_development_state) {
...
}
}
}
我的意思是:重构邮件到MyMailer :: mail可以为你做每个IDE;)
答案 4 :(得分:1)
您也可以尝试在PHP中使用override_function方法:
http://php.net/manual/en/function.override-function.php
它允许您将mail()函数降级为虚函数。这样就没有任何反应,但如果您为生产环境注释override_function,代码仍然可以在生产中使用。