
В этой статье я хочу рассказать об отправке почты из 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.
2) Вносим изменения в файл php.ini:
[mail function]
SMTP =
sendmail_from =
sendmail_path = "C:\wamp\sendmail\sendmail.exe -t"
Как видите, нужно только указать путь к 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
; очень полезная на этапе отладки опция. Протоколируются все операции, которые выполняет sendmailauth_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
hostname=mail.ru
Теперь не забудьте перезапустить web сервер, чтобы изменения вступили в силу.
Чтобы протестировать работу почты напишем простенький скрипт:
01 <html xmlns="http://www.w3.org/1999/xhtml"> 02 <head> 03 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 04 <title>Simple Mail</title> 05 </head> 06 <body> 07 <?php 08 $addr = $_POST['addr']; 09 $theme = $_POST['theme']; 10 $text = $_POST['text']; 11 if (isset($addr) && isset($theme) && isset($text) 12 && $addr != "" && $theme != "" && $text != "") { 13 if (mail($addr, $theme, $text, "From: vova_33@mail.ru")) { 14 echo "<h3>Сообщение отправлено</h3>"; 15 } 16 else { 17 echo "<h3>При отправке сообщения возникла ошибка</h3>"; 18 } 19 } 20 ?> 21 <form action="mailer.php" method="post"> 22 <p> 23 <label for="addr">eMail:</label> 24 <input type="text" name="addr" id="addr" size="30" /> 25 </p> 26 <p> 27 <label for="theme">Тема письма:</label> 28 <input type="text" name="theme" id="theme" size="30" /> 29 </p> 30 <p> 31 <label for="text">Текст письма:</label> 32 <textarea rows="10" cols="20" name="text" id="text"></textarea> 33 </p> 34 <p> 35 <input type="submit" value="Отправить" /> 36 </p> 37 </form> 38 </body> 39 </html>
Он создает форму с тремя полями для ввода адреса, темы и содержания письма. Нажатие на кнопку «Отправить» отправит запрос этому же скрипту (строка 21).
Если данные введены, то будет вызвана функция mail (строка 13), которая и отправит письмо. В случае успешной отправки функция возвращает true, в противном случае — false.
Как видите, ничего сложного в настойке почты нет.
Удачи!
Источник: кросспостинг из моего блога – www.simplecoding.org.