【问题标题】:Disabling PHP sendmail for development environment为开发环境禁用 PHP sendmail
【发布时间】:2012-03-27 03:00:08
【问题描述】:

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

有什么简单的方法在 PHP 中禁用 sendmail 而不会引发错误?

【问题讨论】:

    标签: php development-environment sendmail


    【解决方案1】:

    你为什么不直接使用 Mailerclass:

     class MyMailer {
        private static $is_development_state = true;
        public static function mail(...) {
            if (self::$is_development_state) {
              ...
            }
        }
     }
    

    我的意思是:将邮件重构为 MyMailer::mail 可以为您完成所有 IDE ;)

    【讨论】:

      【解决方案2】:

      解决您的问题的另一种方法是将本地后缀设置为本地交付。每封电子邮件都会发送到您的本地电子邮件帐户!

      https://serverfault.com/questions/137591/postifx-disable-local-delivery

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          你也可以尝试在 PHP 中使用 override_function 方法:

          http://php.net/manual/en/function.override-function.php

          它允许您将 mail() 函数降级为虚拟函数。这样什么都不会发生,但是如果您为生产环境注释 override_function,代码仍然可以在生产环境中工作。

          【讨论】:

            【解决方案5】:

            你也可以像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

            【讨论】:

              猜你喜欢
              • 2011-03-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-08-31
              • 1970-01-01
              • 1970-01-01
              • 2022-09-25
              相关资源
              最近更新 更多