为开发环境禁用PHP sendmail

时间:2012-03-09 16:45:13

标签: php development-environment sendmail

我在LAMP环境中处理一个发送大量电子邮件通知的系统。我想要一种方法来阻止PHP在我的开发环境中发送实际的电子邮件。现在,我正在评论所有的mail()行,但这开始引起QA人员下游的混乱,因为他们正在删除注释掉的行并将它们推送给测试人员。

任何简单的方法都可以在PHP中禁用sendmail而不会抛出错误?

5 个答案:

答案 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)

查看Fakemailsmtp4dev(仅适用于Windows的最后一个)这些工具允许您不修改代码和测试邮件发送。

答案 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,代码仍然可以在生产中使用。