Как настроить PHP для отправки электронной почты на Apache? (Windows)

Как настроить PHP для отправки электронной почты на Apache? (Windows)

Я настраиваю сервер Apache (2.2.14) на Windows и заимствую идеи из существующей конфигурации XAMPP. Сейчас я пытаюсь настроить функционал электронной почты для PHP (5.3.1). (Он должен уметь обрабатывать вложения, как это делает сервер XAMPP.)

Я заметил, что XAMPP поставляется споддельный sendmail для Windows, но некоторые моменты в конфигурации мне непонятны.

Вот пара строк из XAMPP php.ini:

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

Это странно, потому что:

  • Там явно написано «только для Unix», но
    • Я постоянно вижу руководства, в которых говорится, что нужно использовать эту строку для Windows, и
    • пример пути к файлу даже не имел бы смысла в Unix
  • sendmail_pathпо умолчанию закомментирован

Я задавался вопросом, а sendmail.exeнужно ли это вообще. Поэтому на моем сервере Apache, на котором нет sendmail.exe, я отредактировал, php.iniчтобы добавить правильную информацию для SMTP, smtp_port, и sendmail_from. С этим он смог отправлять почту! Но это очень медленно.

Затем я вернулся на сервер XAMPP и переименовал каталог sendmail, надеясь отключить sendmail. Это сработало — мой PHP-скрипт утверждал, что отправил, но ничего не произошло.

Поэтому я в полном замешательстве.

  • Мой сервер XAMPP закомментирован sendmail_path, но, судя по всему, все еще использует программу, на которую он указывает. Откуда он знает?
  • Мой сервер Apache не имеет ничего в sendmail_path, но может как-то отправлять почту без него. Как он это делает?

Что мне на самом деле нужно сделать, чтобы настроить сервер Apache для отправки писем?

решение1

После дальнейшего поиска и тестирования выяснилось, что:

  1. В Windows функция PHP mail() не обязательно должна передавать электронную почту другой программе на том же компьютере; она может подключаться к почтовому серверу самостоятельно.

  2. Однако это неэффективно и медленно.

  3. Настройкаподдельный sendmailна серверной машине и указание php.iniдирективы sendmail_pathна нее делает отправку электронной почты намного быстрее. Лично я представляю, как sendmail.exeпережевываю данные в удобные для усвоения кусочки и плюю в рот почтового сервера, как птица-мать кормит своего птенца. Мммм! Но, может, я сумасшедший.

  4. Если вы поместите sendmail.exeв C:\usr\bin, это позволит некоторым программам, которые, как ожидается, будут работать в ОС на базе Unix, работать в Windows.

Вотнекоторая информация в руководстве по PHPэто помогло мне разобраться.

Примечание: Реализация mail() в Windows во многом отличается от реализации в Unix. Во-первых, она не использует локальный двоичный файл для составления сообщений, а работает только на прямых сокетах, что означает, что MTA должен прослушивать сетевой сокет (который может быть как на локальном хосте, так и на удаленной машине).

И...

Примечание: Стоит отметить, что функция mail() не подходит для больших объемов электронной почты в цикле. Эта функция открывает и закрывает сокет SMTP для каждого письма, что не очень эффективно. Для отправки больших объемов электронной почты см. пакеты » PEAR::Mail и » PEAR::Mail_Queue.

решение2

Apache на самом деле не участвует ни в какой конфигурации отправки электронной почты. Это полностью обрабатывается PHP и, в данном случае, локальным MTA. MTA почти всегда будет Sendmail или Postfix. Конфигурация для этого находится в файле php.ini в разделе [mail function] с именем sendmail_path.

Связанный контент