Отключение PHP sendmail для среды разработки - PullRequest
4 голосов
/ 09 марта 2012

Я нахожусь в среде LAMP и работаю в системе, которая отправляет множество уведомлений по электронной почте.Я бы хотел, чтобы PHP не отправлял реальные письма в моей среде разработки.Прямо сейчас я закомментирую все строки mail (), но это начинает вызывать путаницу вниз по течению с людьми, отвечающими за обеспечение качества, потому что они удаляют закомментированные строки и отправляют их тестерам.

Любойпростой способ отключить sendmail в PHP без выдачи ошибки?

Ответы [ 5 ]

3 голосов
/ 11 февраля 2016

Вы также можете настроить небольшой скрипт 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

2 голосов
/ 09 марта 2012

еще одно решение вашей проблемы - настроить локальный постфикс для локальной доставки.каждое письмо будет отправлено на ваш локальный почтовый ящик!

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

2 голосов
/ 09 марта 2012

Посмотрите на Fakemail или smtp4dev (последний только для Windows). Эти инструменты позволяют вам не изменять свой код и тестировать отправку писем.

1 голос
/ 09 марта 2012

Также вы можете попробовать использовать метод override_function в PHP:

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

Позволяет снизить функцию mail () до фиктивной. Таким образом, ничего не происходит, но код все равно будет работать в производственном режиме, если вы прокомментируете функцию override_function для производственной среды.

1 голос
/ 09 марта 2012

Почему бы вам не использовать Mailerclass, например:

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

Я имею в виду: рефакторинг почты в MyMailer :: mail может сделать для вас любую IDE;)

...