Проблема с PHP-почтой

Я пытаюсь реализовать функцию сброса пароля на моем веб-сайте компании, где, если пользователь должен восстановить свой пароль, она может нажать на ссылку, и новый, случайно сгенерированный пароль будет отправлен в ее почтовый ящик.

Я использую функцию PHP mail() . Теперь я запускаю PHP5 на машине Ubuntu. В php.ini я объявил SMTP как IP-адрес машины, на которой запущен почтовый сервер, а smtp_port – 25. Далее я попытался подключиться telnet к почтовому серверу на порт 25 и отправить почту – он работает (мой рабочий терминал – Windows) ,

Проблема в том, что почта не отправляется / не принимается – скрипт PHP, вызывающий mail() зависает около 1 минуты, в конце которого mail() возвращает true .

Хуже всего то, что я не в курсе, как узнать, где лежит проблема – с PHP, с Ubuntu, с почтовым сервером или с кодом!

Может ли кто-нибудь помочь?

Я недавно не смотрел php.ini, но не говорит:

 [mail function] ; For Win32 only. ;SMTP = 

Акцент делается только на Win32 .

Возможно, вы захотите посмотреть на PEAR :: Mail . Когда pear.php.net действительно отвечает, то есть.

Можете ли вы проверить файлы mail.err и mail.log?

Возможно, вашему почтовому серверу требуется аутентификация («POP before SMTP» или ASMTP – аутентифицированный SMTP). Поскольку вы, вероятно, недавно проверили свою электронную почту с вашего компьютера Windows, ваш IP-адрес будет аутентифицирован и разрешен для отправки электронной почты в течение короткого времени: с вашей машины Ubuntu, вероятно, нет.

На машине Ubuntu проверьте, не можете ли вы использовать IP-адрес своего SMTP-сервера: PHP должен решить, как отправить сообщение по электронной почте в любом случае. В противном случае вам нужно будет узнать, как аутентифицироваться на сервере электронной почты и внедрять его в PHP.

Попробуйте отправить электронное письмо с почтовой программой из оболочки. Сначала посмотрите, работает ли это.

Проблема с вашим интернет-провайдером. Порт 25 часто блокируется интернет-провайдерами для предотвращения массового спама. Попробуйте перейти на нестандартный порт и посмотрите, поможет ли это.

Изменить: И вот что-то детализирует проблему (хотя их решение заключается в передаче на почтовый сервер ISP, а не на изменении портов).

Вам нужен почтовый класс SMTP Zend Framework, например, потому что эта глупая версия php-интерфейса Braindead не работает с портами SMTP в Unix.

Подпишитесь на рассылку PHP Core и жалуйтесь на нее – возможно, они меняют ее, если все больше и больше людей приходят, и они видят, что не все, что такое sendmail.

Также можно обойти функцию mail () php с помощью почтовой библиотеки. Например, SwiftMailer ( http://swiftmailer.org/ ) Это действительно хороший класс для безопасной отправки электронной почты (plain / html).

С помощью этого класса вы можете напрямую подключиться к SMTP-серверу и, таким образом, обойти конфигурацию сервера.