Кромешная inurl sendmail php. Отправка писем с помощью php
Каждый раз настраивая локальный вебсервер, сталкиваюсь с вопросом о заглушке для Sendmail.
Есть прекрасное решение для Windows: fake sendmail for windows
(sendmail.exe) http://glob.com.au/sendmail/
На хабре есть статья об этом решении: PHP mail под Windows
http://habrahabr.ru/post/26518/
Ещё одно решение под Windows: Test Mail Server Tool
http://www.toolheap.com/test-mail-server-tool/
Так же есть статья для линуксоидов: Sendmail-заглушка для Linux
http://habrahabr.ru/post/49665/
Лично мне больше понравилось решение на чистом PHP, о котором и пойдёт дальнейшее описание.
Особенность этого решения в том, что для его настройка минимальна, можно даже обойтись без самого файла, если конечно вам нет нужды знать содержимое сообщения. На мой взгляд, такой метод стоит того, что бы о нём знали другие разработчики PHP.
Вопрос в том, что является вашим приоритетом как разработчика, ваши потребности от заглушки, а также ваш уровень знаний и умений.
Из плюсов:
- Отсутствие сторонних сервисов
- Кроссплатформенное решение для OS на которой установлен PHP
- Минимальный размер файла заглушки
- Минимальная настройка
- Вся логика заглушки доступна для редактирования на PHP
- Сохранение сообщения в файле
Из минусов:
- Отсутствие пересылки на реальный почтовый ящик
- Отсутствие удобного доступа к отправленным сообщениям
Список аргументов и возможностей заглушки:
- --dir <Путь к папке> - Папка для файлов
- --file <имя файла> - Сохранять каждое сообщение в конкретном общем файле
- --prepend - Добавлять новое сообщение в начало общего файла
- --open - Автоматически открывать файл сообщения в Notepad
Параметры для PHP.INI файла:
;SMTP = localhost ;smtp_port = 25 ;sendmail_from = [email protected] sendmail_path = "php.exe C:\sendmail.php --dir C:\mail --open"
Если путь к php.exe прописан в PATH, то можно не указывать его в PHP.INI иначе желательно изменить php.exe на <Путь к папке с PHP>\php.exe
Sendmail_path = "C:\server\bin\php\php.exe C:\sendmail.php --dir C:\mail --open"
На линукс можно сразу указать путь к файлу, не забыв предварительно сделать его запускаемым: chmod 755 sendmail.php
sendmail_path = "/home/someuser/sendmail.php --dir /tmp/mail"
Сам sendmail.php скрипт:
#!/usr/bin/env php
Как я и обещал, есть также возможность обойтись совсем без файла.
Sendmail_path = "C:\server\bin\php\php.exe -r "echo 1;""
Либо использовать упрощённый вариант решения
Sendmail_path = "C:\server\bin\php\php.exe C:\sendmail.php"
sendmail.php:
#!/usr/bin/env php
Буду рад, если Вам это будет полезным.
Каждый раз настраивая локальный вебсервер, сталкиваюсь с вопросом о заглушке для Sendmail.
Есть прекрасное решение для Windows: fake sendmail for windows
(sendmail.exe) http://glob.com.au/sendmail/
На хабре есть статья об этом решении: PHP mail под Windows
http://habrahabr.ru/post/26518/
Ещё одно решение под Windows: Test Mail Server Tool
http://www.toolheap.com/test-mail-server-tool/
Так же есть статья для линуксоидов: Sendmail-заглушка для Linux
http://habrahabr.ru/post/49665/
Лично мне больше понравилось решение на чистом PHP, о котором и пойдёт дальнейшее описание.
Из плюсов:
- Отсутствие сторонних сервисов
- Кроссплатформенное решение для OS на которой установлен PHP
- Минимальный размер файла заглушки
- Вся логика заглушки доступна для редактирования на PHP
- Сохранение сообщения в файле
Из минусов:
- Отсутствие пересылки на реальный почтовый ящик
Список аргументов и возможностей заглушки:
- --dir <Путь к папке> - Папка для файлов
- --file <имя файла> - Сохранять каждое сообщение в конкретном общем файле
- --prepend - Добавлять новое сообщение в начало общего файла
- --open - Автоматически открывать файл сообщения в Notepad
Параметры для PHP.INI файла:
;SMTP = localhost ;smtp_port = 25 ;sendmail_from = [email protected] sendmail_path = "php.exe C:sendmail.php --dir C:mail --open"
Если путь к php.exe прописан в PATH, то можно не указывать его в PHP.INI иначе желательно изменить php.exe на <Путь к папке с PHP>php.exe
Sendmail_path = "C:serverbinphpphp.exe C:sendmail.php --dir C:mail --open"
На линукс можно сразу указать путь к файлу, не забыв предварительно сделать его запускаемым: chmod 755 sendmail.php
Sendmail_path = "/home/someuser/sendmail.php --dir /tmp/mail"
Сам sendmail.php скрипт:
#!/usr/local/bin/php
Буду рад, если Вам это будет полезным.
Недавно настраивал домашний сервер, и понадобилось мне там протестировать отправку почты. Но вот беда, при запросе страницы, которая отправляет почту вылезала 500 ошибка.
Проблема
Начал смотреть, в чём же дело. В логах php-fpm ничего интереного нет, в логах nginx видно, что php-fpm upstream отваливает по таймауту.
2013/04/18 15:28:01 6928#0: *1409 upstream timed out (110: Connection timed out) while reading response header from upstream, client: xx.xx.xx.xx, server: , request: "POST /page.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9010", host: "site.ru", referrer: "http://site.ru"
И тут мне в голову пришла идея заглянуть в syslog. Там то я и увидел интересные строчки:
Sep 9 18:53:20 mega sm-msp-queue: My unqualified host name (mega) unknown; sleeping for retry Sep 9 18:54:20 mega sm-msp-queue: unable to qualify my own domain name (mega) -- using short name
Ага, начал грешить в сторону sendmail. Пробую перезапустить его командой:
Sudo service sendmail restart
и вижу подтверждение своей догадки.
Andrey@mega:/home/andrey# sudoservice sendmail restart sudo: unable to resolve host xyz.xyz * Restarting Mail Transport Agent (MTA) sendmail andrey@mega:/home/andrey#
Решение
Дело оказалось в имени сервера. После того, как поставил вот такое имя сервера (с точкой) — всё заработало как надо.
127.0.0.1 localhost localhost.localdomain mega mega.foobar