Общие сведения: если вы настроили локальный сервер 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) Вы должны использовать опцию sendmail '-f' всякий раз, когда используете почтовую функцию. Например:
mail('recipient@somewhere.com', 'the subject', 'the message', null, '-fsender@somewhere.com');
Мой вопрос к моим коллегам-сбойникам:
Какие дальнейшие изменения можно внести, чтобы мне не приходилось использовать параметр sendmail -f? Хотя добавить опцию -f не так уж сложно, это проблема, когда ваша CMS (например, Drupal) не использует опцию -f при отправке почты. Вам нужно будет взломать основной модуль, чтобы добавить эту опцию.
Я знаю, что вы спрашиваете не об этом, но почему вы не пробуете Postfix или Exim? Оба они доступны для ubuntu (Postfix - это даже mta по умолчанию в системах Ubuntu), и оба предоставляют совместимую команду sendmail, которая работает очень хорошо. IMHO sendmail устарел, и у вас будет больше шансов получить поддержку с более современным MTA.
Это сработало для меня:
См. Инструкции здесь, как это сделать: https://help.ubuntu.com/community/Postfix (Возможно, он уже установлен, и двоичный файл sendmail может быть псевдонимом для postfix)
http://lenss.nl/2009/01/making-php-mail-work-on-ubuntu-through-postfix/
mkfifo /var/spool/postfix/public/pickup
Найти
sendmail
обработатьps aux | grep mail
Убей это
kill <thepid>
Начать сначала
postfix
/etc/init.d/postfix restart
Я думаю, вы можете просто установить параметр 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), и что, если настроено интеллектуальное реле, имя разрешается в адрес, к которому система может подключиться.