Исходная информация: Если вы настроили локальный сервер Apache для целей разработки, вы можете столкнуться с проблемой, когда sendmail занимает много времени (как минимум, одна минута) для отправки электронной почты. Это очень неприятно, если вы пытаетесь отладить проблему с созданным вами письмом.
В Интернете есть несколько сообщений на форуме, которые обсуждают эту проблему. Однако ни одна из тем не описала, что делать достаточно подробно для моих ограниченных знаний. Вот шаги, которые работали для меня:
1) найдите ваше имя хоста (если вы его забыли) с помощью этой команды:
:~$ cat /hosts/hostname
myhostname
2) отредактируйте файл /etc/hosts
и убедитесь, что в первой строке указано следующее:
127.0.0.1 localhost.localdomain localhost myhostname
3) отредактируйте файл конфигурации sendmail ( /etc/mail/sendmail.cf
в Ubuntu) и раскомментируйте строку#O HostsFile=/etc/hosts
4) Перезагрузите компьютер. Компьютер должен загружаться намного быстрее, а функция mail () должна возвращаться почти немедленно. ОДНАКО, электронные письма фактически не будут отправлены, если вы не выполните шаг 5.
5) Каждый раз, когда вы используете функцию mail, вы должны использовать опцию sendmail '-f'. Например:
mail('recipient@somewhere.com', 'the subject', 'the message', null, '-fsender@somewhere.com');
Мой вопрос к моим коллегам-разработчикам серверов:
Какие дальнейшие изменения можно внести, чтобы мне не приходилось использовать опцию sendmail -f? Хотя добавить параметр -f не очень сложно, проблема заключается в том, что ваша CMS (например, Drupal) не использует параметр -f при отправке почты. Вам нужно взломать основной модуль, чтобы добавить эту опцию.
cat /etc/hostname
Ответы:
Ну, я знаю, что это не то, что вы спрашиваете, но почему вы не пробуете Postfix или Exim? Они оба доступны для Ubuntu (Postfix - даже mta по умолчанию в системах Ubuntu), и они оба предоставляют совместимую команду 'sendmail', которая работает очень хорошо. ИМХО sendmail отчасти устарел, и у вас больше шансов на поддержку с более современным MTA.
источник
sendmail
двоичный файл, который принимает те же параметры, что и исходный sendmail, для обеспечения совместимости.Это сработало для меня:
Смотрите здесь инструкции о том, как это сделать: https://help.ubuntu.com/community/Postfix (возможно, он уже установлен, и двоичный файл 'sendmail' может фактически быть псевдонимом для postfix)
http://lenss.nl/2009/01/making-php-mail-work-on-ubuntu-through-postfix/
Я думаю, что вы можете просто установить параметр 'myorigin' для любого активного доменного имени, такого как ваше доменное имя.
источник
Это может или не может быть решением для вас: добавьте
mail.force_extra_parameters = "-fsender@somewhere.com"
в свой файл php.ini . Это заставляет PHP автоматически добавлять -fsender@somewhere.com в качестве пятого параметра к функции PHP mail ().Это жестко закодированное значение, которое применимо только в php.ini, поэтому оно не будет очень гибким, но, возможно, подойдет вам в вашем случае разработки?
источник
Наблюдая за сетевым трафиком (подумайте
tcpdump
) или запустивstrace
процессы sendmail или apache, вы сможете понять, почему существует такая задержка, чтобы вы могли решить проблему с корнем.Обычно задержки в этом диапазоне происходят из-за сбоя поиска DNS, но вы не узнаете, пока не посмотрите. Если вы не исправите основную проблему, она, вероятно, станет проблемой, независимо от того, как вы пытаетесь ее обойти.
источник
Я никогда не сталкивался с проблемой использования mail () в PHP, которая не была результатом проблемы на MTA.
В вашем файле php.ini он покажет, какую команду он запускает для отправки электронного письма (по умолчанию: «sendmail -t -i»). Попробуйте отправить письмо из командной строки, используя это - я держу пари, это медленно.
Обычно необходимо проверить, правильно ли настроен DNS-сервер на машине (и может ли он разрешить все адреса, настроенные в MTA), и что если настроено интеллектуальное реле, то имя можно преобразовать в адрес, к которому может подключиться система.
источник