Данная статья входит в цикл статей, посвященных установке веб сервера на windows.
Установка веб сервера на windows Настройка и защита apache под windows Бесплатный ДНС сервер Настройка php Настройка mysql Настройка phpmyadmin Настройка sendmail (эта статья) Настройка ftp сервера FileZilla
В этой статье я расскажу как установить и настроить sendmail на домашнем сервере под windows. Для начала скачайте комплект sendmail. Если у вас уже стоит sendmail можете его удалить, а на его место скопировать скаченные файлы. Особенно это касается тех, кто устанавливал сервер с помощью xampp. Дело в том, что в последних версиях xampp лежит новая версия sendmail, лично я так и не смог его запустить, к тому же он работает с уже другим типом конфигурации. Возможно проблемы с этим новым sendmail и будут решены в дальнейшем, а пока предлагаю использовать старый проверенный вариант, который работает как «трактор». Так же в архиве лежит две библиотеки, с помощью которых sendmail может работать с защищенными соединениями TLS, типа почты гугла(gmail).
Скачали архив, распаковали, закачали файлы в папку sendmail, если такой папки нет, создайте ее. Для xampp это путь /xampp/sendmail. Теперь открывайте настройки sendmail.ini, в архиве находится пример этого файла с русскими комментариями. Привожу пример файла настроек
; конфигурационный файл sendmail
; здесь укажите сервер исходящей почты smtp_server=smtp.mail.ru
; порт smtp, если обычный режим отправки, то порт будет 25 ; если сервер работает в защищенном режиме (TLS), то порт 465, например почта гугла работает через 465 порт smtp_port=25
; домен по умолчанию (совсем не обязательно) ;default_domain=local
; лог ошибок error_logfile=error.log
; лог отправки, необходим на стадии тестирования. содержит весь текст переговоров с сервером при отправке писем. debug_logfile=debug.log
; Если smtp сервер с авторизацией, укажите логин пароль(без кавычек), если без авторизации ничего не пишите auth_username= auth_password=
; если перед отправкой почты сервер требует авторизацию через POP, заполните эти поля ;pop3_server= ;pop3_username= ;pop3_password=
; email адрес, от которого идет отправка, вставится в заголовок «From: » ; если отправка писем идет через mail.ru, здесь обязательно должен быть адрес, через который произведена авторизация. force_sender=
; хост, который указывается при авторизации в команде ehlo/helo ; указывайте домен, через который авторизуетесь hostname=mail.ru
Вносите свои данные, логин-пароль и т.д. и все готово. Сейчас настройте PHP, чтобы он мог использовать sendmail. Откройте php.ini и найдите следующие строки
Первые строки указанные здесь закройте комментарием как показано (они не нужны), нужна только последняя строка указанная здесь, это путь до sendmail. Укажите свой путь и снимите комментарий (;) если он стоит. Теперь перегружайте сервер и все готово, функция mail() должна работать. Если возникают проблемы с отправкой почты, смотрите файлы error.log и debug.log в sendmail(если вы их конечно включили в настройках sendmail.ini)
Другие статьи, посвященные запуску сервера на windows
Установка веб сервера на windows Настройка и защита apache под windows Бесплатный ДНС сервер Настройка php Настройка mysql Настройка phpmyadmin Настройка sendmail (эта статья) Настройка ftp сервера FileZilla
Комментарии
03.12.2010 Andrei Если у мя сервер www.server.ru , то в smtp_server=smtp.server.ru указываю так?
04.12.2010 админ Andrei, совсем не обязательно. Смотря как настроен smtp сервер. Чаще всего mail.server.ru или smtp.server.ru. А может быть и без поддомена, например просто server.ru. Это надо узнать там, где smtp сервер находится.
05.12.2010 Sheg Письмо почему то не доходит. В error.log: SSL is not available on this server. В чём проблема, smtp Гугловский.
05.12.2010 админ Sheg, в ошибке сказано, что ваш сервер не поддерживает SSL соединение. Гугловская почта работает только в защищенном режиме SSL, поэтому вам нужно установить поддержку SSL для sendmail. http://webi.ru/webi_files/sendmail_ssl.html — здесь комплект с поддержкой SSL.
09.12.2010 Вячеслав. Все настроил, при отправке письма скрипт ошибок не выдает — но в итоге, письмо для адресата так и не доходит. В чем может быть проблема ? Спасибо.
09.12.2010 админ Вячеслав, включите логи. Лог ошибок и лог отправки и посмотрите в эти файлы. И сразу все будет ясно.
10.12.2010 Вячеслав. Логи включены — ни каких сообщение об ошибках нет.
10.12.2010 Evengar Вчера всё работало норм, сегодня письмо не доходит через мейл.ру. Ошибка Socket Error # 10054 Connection reset by peer.
11.12.2010 админ Вячеслав, ну а в debug.log что? Там ошибок нет, по этим логам письмо отправляется?
11.12.2010 админ Evengar, ну если вчера отправлялось, а сегодня нет, значит проблемы с вашей связью или с сервером mail.ru
21.12.2010 Алексей У меня sendmail даже на *.exe никак не реагирует, не говоря о скриптах, и в логах тож ниче нет(((
21.12.2010 админ Алексей, можно подробнее? Что значит «sendmail на *.exe не реагирует»?
и письмо не отправляется в чем причина , что не так.
26.12.2010 админ Виталий, что-то не совсем понятно. вроде начинается защищенное соединение и обрывается. с другими серверами пробовали коннектиться?
04.01.2011 Алексей К. Та же проблема с ошибкой: «Socket Error # 10054 Connection reset by peer.»
И еще, по моему на Unix такой ошибки нету. Но письма все-равно не отправляются.
04.01.2011 Алексей К. Спасибо вам большое . Все получилось при использовании другого сервера почты!
04.01.2011 И еще вопрос,до каких размеров будет расти debug.log ? Или его можно отключить?
04.01.2011 админ конечно лог отправки и лог ошибок можно отключить, просто удалите эту строку из конфига или закройте комментарием (;)
05.01.2011 Алексей К. Спасибо еще раз! С Новым годом.
10.01.2011 Alex Подскажите пожалуйста. Я первый раз пытаюсь настроить sendmail. Вообщем если я правильно понял настройки которые в sendmail.ini это для почты с которой будет отправляться письма, а адресс почты который указан в mail(); это куда будет производиться отправка. Если да, все делаю по примеру, почта у меня на гугле: smtp_server=smtp.gmail.com smtp_port=587 auth_username=name@gmail.com auth_password=pass force_sender=name@gmail.com hostname=gmail.com
В этой статье я хочу рассказать об отправке почты из php скриптов под Windows.
Америку я, конечно, не открою, но надеюсь, что кому-то эта статья будет полезна или просто сэкономит время.
С точки зрения php программиста отправка почты выполняется с помощью стандартной функции mail() . И вот тут у многих начинающих разработчиков возникает проблема. Скрипт, прекрасно работающий на сервере хостера, выдает ошибки на локальном компьютере.
Обычно эти ошибки имеют примерно такое описание: Warning: mail() [function.mail]: Failed to connect to mailserver at «localhost» port 25, verify your «SMTP» and «smtp_port» setting in php.ini or use ini_set() in E:\www\simplemail\mailer.php on line .
Дело в том, что функция mail сама по себе почту не отправляет, она просто вызывает программу sendmail, которая в дистрибутив web сервера и php интерпретатора не входит (и не должна).
Sendmail, в свою очередь, для отправки почты использует SMTP сервер.
Таким образом, чтобы php скрипт мог отправлять почту нужно установить и настроить sendmail и SMTP сервер.
Версию sendmail для Windows можно скачать здесь.
Установка и настройка выполняется в три этапа.
1) Распаковываем архив на тот же диск, где установлен php. Например, я создал папку C:\wamp\sendmail.
Как видите, нужно только указать путь к sendmail чтобы php мог ее найти.
3) Настраиваем sendmail. Все настройки находятся в файле sendmail.ini (расположен в папке с sendmail).
Но перед тем как приступать к настройке пару слов об SMTP сервере. Вам совсем не обязательно устанавливать сервер на вашем компьютере. Многие почтовые сервисы предоставляют бесплатный доступ к своим серверам.
Ниже я покажу пример настройки sendmail для работы с SMTP сервером mail.ru, но, естественно, вы выбрать любой другой.
Итак, открываем sendmail.ini и устанавливаем следующие параметры:
smtp_server=smtp.mail.ru ; адрес SMTP сервера smtp_port=25 ; порт SMTP сервера
default_domain=mail.ru ; домен по-умолчанию
error_logfile=error.log ; файл в который будет записываться лог ошибок
debug_logfile=debug.log ; очень полезная на этапе отладки опция. Протоколируются все операции, которые выполняет sendmail
auth_username=account_name@mail.ru ; имя вашего аккаунта auth_password=account_password ; ваш пароль
; следующие три опции используются если перед авторизацией на SMTP сервере требуется авторизация на POP3 сервере pop3_server=pop.mail.ru pop3_username=account_name@mail.ru pop3_password=account_password
; параметр для команды MAIL FROM force_sender=account_name@mail.ru
Теперь не забудьте перезапустить web сервер, чтобы изменения вступили в силу.
Чтобы протестировать работу почты напишем простенький скрипт:
Он создает форму с тремя полями для ввода адреса, темы и содержания письма. Нажатие на кнопку «Отправить» отправит запрос этому же скрипту (строка 21).
Если данные введены, то будет вызвана функция mail (строка 13), которая и отправит письмо. В случае успешной отправки функция возвращает true, в противном случае — false.
Каждый раз настраивая локальный вебсервер, сталкиваюсь с вопросом о заглушке для 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 файла:
Если путь к php.exe прописан в PATH, то можно не указывать его в PHP.INI иначе желательно изменить php.exe на \php.exe
На линукс можно сразу указать путь к файлу, не забыв предварительно сделать его запускаемым: chmod 755 sendmail.php
Как я и обещал, есть также возможность обойтись совсем без файла.
Поведение этих функций зависит от установок в php.ini .
Конфигурационные опции отправки писем
Имя
По умолчанию
Место изменения
Список изменений
mail.add_x_header
«0»
PHP_INI_PERDIR
Доступно с PHP 5.3.0.
mail.log
NULL
PHP_INI_PERDIR
Доступно с PHP 5.3.0. (PHP_INI_SYSTEM|PHP_INI_PERDIR)
mail.force_extra_parameters
NULL
PHP_INI_PERDIR
Доступно с PHP 5.0.0. (PHP_INI_SYSTEM|PHP_INI_PERDIR)
SMTP
«localhost»
PHP_INI_ALL
smtp_port
«25»
PHP_INI_ALL
sendmail_from
NULL
PHP_INI_ALL
sendmail_path
«/usr/sbin/sendmail -t -i»
PHP_INI_SYSTEM
Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.
Краткое разъяснение конфигурационных директив.
Добавляет заголовок X-PHP-Originating-Script, который будет содержать UID скрипта и имя файла.
Путь к лог-файлу, в который будут записываться все вызовы функции mail() . Записи в логе содержат полный путь до скрипта, номер строки, адрес получателя To и заголовки.
Принудительно добавить указанные параметры для отправки в sendmail. Эти параметры всегда заменяют значение пятого параметра в mail() , даже в безопасном режиме.
Использутся только в Windows: домен или IP-адрес SMTP-сервера, к которому будет обращаться PHP при отправке почты функцией mail() .
Использутся только в Windows: порт SMTP-сервера, к которому будет обращаться PHP при отправке почты функцией mail() ; по умолчанию 25.
Адрес, который будет использоваться в заголовке «From:» в письмах, посылаемых PHP в Windows. Эта директива также устанавливает заголовок «Return-Path:».
Путь до программы sendmail, обычно /usr/sbin/sendmail или /usr/lib/sendmail . configure пытается найти sendmail автоматически и установить значение по умолчанию самостоятельно, но если это не удалось, вы можете установить путь здесь.
Системы, не использующие sendmail, должны установить эту директиву в путь до обертки/заменителя sendmail. Например, пользователи » Qmail обычно устанавливают значение /var/qmail/bin/sendmail или /var/qmail/bin/qmail-inject .
qmail-inject не требует дополнительных опций для отправки писем.
Эта директива также работает и в Windows. Если она установлена, smtp , smtp_port и sendmail_from будут проигнорированы и выполнится указанная программа.
Php mail под windows (настройка sendmail на windows)
С точки зрения php программиста отправка почты выполняется с помощью стандартной функции mail() . И вот тут у многих начинающих разработчиков возникает проблема. Скрипт, прекрасно работающий на сервере хостера, выдает ошибки на локальном компьютере.
Обычно эти ошибки имеют примерно такое описание: Warning: mail() [function.mail]: Failed to connect to mailserver at «localhost» port 25, verify your «SMTP» and «smtp_port» setting in php.ini or use ini_set() in E:\www\simplemail\mailer.php on line .
Дело в том, что функция mail сама по себе почту не отправляет, она просто вызывает программу sendmail, которая в дистрибутив web сервера и php интерпретатора не входит (и не должна).
Sendmail, в свою очередь, для отправки почты использует SMTP сервер.
Таким образом, чтобы php скрипт мог отправлять почту нужно установить и настроить sendmail и SMTP сервер.
Версию sendmail для Windows можно скачать здесь.
Установка и настройка выполняется в три этапа.
1) Распаковываем архив на тот же диск, где установлен php. Например, я создал папку C:\wamp\sendmail.
Как видите, нужно только указать путь к sendmail чтобы php мог ее найти.
3) Настраиваем sendmail. Все настройки находятся в файле sendmail.ini (расположен в папке с sendmail).
Но перед тем как приступать к настройке пару слов об SMTP сервере. Вам совсем не обязательно устанавливать сервер на вашем компьютере. Многие почтовые сервисы предоставляют бесплатный доступ к своим серверам.
Ниже я покажу пример настройки sendmail для работы с SMTP сервером mail.ru, но, естественно, вы выбрать любой другой.
Итак, открываем sendmail.ini и устанавливаем следующие параметры:
smtp_server=smtp.mail.ru ; адрес SMTP сервера smtp_port=25 ; порт SMTP сервера
default_domain=mail.ru ; домен по-умолчанию
error_logfile=error.log ; файл в который будет записываться лог ошибок
debug_logfile=debug.log ; очень полезная на этапе отладки опция. Протоколируются все операции, которые выполняет sendmail
auth_username=account_name@mail.ru ; имя вашего аккаунта auth_password=account_password ; ваш пароль
; следующие три опции используются если перед авторизацией на SMTP сервере требуется авторизация на POP3 сервере pop3_server=pop.mail.ru pop3_username=account_name@mail.ru pop3_password=account_password
; параметр для команды MAIL FROM force_sender=account_name@mail.ru
Теперь не забудьте перезапустить web сервер, чтобы изменения вступили в силу.