PHP mail под Windows. Отправка почты из PHP скриптов

30 мая, 2008

PHP mail картинка с конвертом

В этой статье я хочу рассказать об отправке почты из 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 ; очень полезная на этапе отладки опция. Протоколируются все операции, которые выполняет 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

hostname=mail.ru

Теперь не забудьте перезапустить web сервер, чтобы изменения вступили в силу.

Чтобы протестировать работу почты напишем простенький скрипт:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>Simple Mail</title>
  7. </head>
  8. <body>
  9. <?php
  10. $addr = $_POST['addr'];
  11. $theme = $_POST['theme'];
  12. $text = $_POST['text'];
  13. if (isset($addr) &amp;&amp; isset($theme) &amp;&amp; isset($text)
  14.         &amp;&amp; $addr != "" &amp;&amp; $theme != "" &amp;&amp; $text != "") {
  15.     if (mail($addr, $theme, $text, "From: vova_33@mail.ru")) {
  16.         echo "<h3>Сообщение отправлено</h3>";
  17.     }
  18.     else {
  19.         echo "<h3>При отправке сообщения возникла ошибка</h3>";
  20.     }
  21. }
  22. ?>
  23. <form action="mailer.php" method="post">
  24. <p>
  25.     <label for="addr">eMail:</label>
  26.     <input type="text" name="addr" id="addr" size="30" />
  27. </p>
  28. <p>
  29.     <label for="theme">Тема письма:</label>
  30.     <input type="text" name="theme" id="theme" size="30" />
  31. </p>
  32. <p>
  33.     <label for="text">Текст письма:</label>
  34.     <textarea rows="10" cols="20" name="text" id="text"></textarea>
  35. </p>
  36. <p>
  37.     <input type="submit" value="Отправить" />
  38. </p>
  39. </form>
  40. </body>
  41. </html>

Он создает форму с тремя полями для ввода адреса, темы и содержания письма. Нажатие на кнопку «Отправить» отправит запрос этому же скрипту (строка 23).

Если данные введены, то будет вызвана функция mail (строка 15), которая и отправит письмо. В случае успешной отправки функция возвращает true, в противном случае - false.

Как видите, ничего сложного в настойке почты нет.

Удачи!

Понравилась статья? Подпишитесь на продолжение rss link !

]]>

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

]]>

Опубликовано в PHP, Web разработка

]]>

Комментарии (84)

Вы можете отслеживать обсуждение записи с помощью RSS 2.0 rss link

Вы также можете оставить комментарий, или трекбек с Вашего сайта.

  1. В состав Денвера входит заглушка для sendmail, которая складывает письма в виде отдельных файлов во временную папку

    1. Денвер считаю вообще какимто выкидешем. Apache 1.3 и PHP 4.1.

      А так большое спасибо за настройку. помогла.

      1. Sam 02.06.2008 в 11:30 (Ответить)

        Вы когда последний раз его смотрели? В 2005-ом? :)

    2. Владимир 31.05.2008 в 19:03 (Ответить)

      Входит, но этот вариант позволяет действительно отправить почту (хотя для тестирования иногда нужна именно заглушка).

  2. JocK 31.05.2008 в 12:22 (Ответить)

    Це загальновідомий факт, але ж далеко не всі користуються даним пакетом

  3. Николай Испанюк, В Denwer-3 Apache2, PHP5, MySQL5.

  4. Scratch 02.06.2008 в 22:27 (Ответить)

    Денверовская заглушка — просто прелесть.
    А если "все-таки нужно отправить почту" — то настраиваю smtp провайдера и отправляю. И все :)

  5. Максим 03.06.2008 в 23:51 (Ответить)

    не когда не получалось настроить и сейчас не вышло….. руки из каки растут наверное =(

    1. Владимир 04.06.2008 в 20:49 (Ответить)

      Что именно не вышло? Если дадите описание ошибок, может быть смогу что-то конкретное посоветовать

      1. Anton 22.09.2008 в 12:45 (Ответить)

        Владимир! Помогите с ошибкой. Parse error: parse error, unexpected ';' in C:\server\root\sendmail.php on line 13. В вашем скрипте! В PHP не розбираюсь, поэтому не знаю какая именно там ему ; не нравиться! Зарание благодарен!

        1. Владимир 22.09.2008 в 22:01 (Ответить)

          Это я пропустил. Просто замените все &amp; на &.
          Т.е. &amp;&amp; нужно заменить на &&
          Если не получится я вышлю вам скрипт почтой

  6. Vladimir 04.06.2008 в 16:22 (Ответить)

    Автору нобелевскую премию или суперприз!!!
    Я пол года назад до этой статьи мля 2 дня убил, но так толком и не смог отправить почту и забросил на .. всё это дело, и только сегодня случайно наткнулся на данный шедевр- в итоге результат: 5 мин. настройки php.ini, sendmail.ini почта отправилась по php-функции mail()и дошла до адресата за 1 мин.
    Громадное спасибо тебе добрый человек!!!
    Я счастлив!!!!!!!!!!
    Здоровья, счастья тебе!!!!!!!!!

    1. Владимир 04.06.2008 в 21:13 (Ответить)

      Да, нобелевку хорошо бы :-)

  7. Vladimir 04.06.2008 в 16:24 (Ответить)

    Автор -ты супер!!!
    Так держать!!!
    MEGA THANK YOU!!!

  8. kossmoss 09.06.2008 в 03:12 (Ответить)

    Спасибо за совет, очень помог.
    Кстати, у меня к денверу тоже неприязнь

  9. Gorian 10.06.2008 в 00:59 (Ответить)

    спасибо огромное за статью. долго морочил голову с отправкой писем. в результате так просто все решилось

  10. AlexZ 10.06.2008 в 07:18 (Ответить)

    Дружище, ну просто громаднейшая тебе благодарность, выручил! :)

  11. Fascist 27.06.2008 в 17:40 (Ответить)

    XAMPP получше Денвера будет.

    1. А чем он лучше?

      1. Владимир 27.06.2008 в 19:58 (Ответить)

        ИМХО это больше вопрос привычек или предпочтений, а не функциональности. Я лично использую WAMPSERVER, в котором меня практически все устраивает.
        А чтобы действительно комфортно себя чувствовать, нужно научиться настраивать конфиги.

  12. root 09.07.2008 в 17:10 (Ответить)

    У меня пример не работает, в debug.log сообщение
    08.07.09 17:31:19 << +OK POP3 server at mail.ru signing off
    08.07.09 17:31:19 ** Disconnected.
    08.07.09 17:31:19 ** Disconnected.
    08.07.09 17:31:19 ** Disconnected.
    08.07.09 17:31:19 ** Connecting to smtp.mail.ru ; адрес SMTP сервера:25
    08.07.09 17:31:19 ** Disconnected.
    08.07.09 17:31:19 ** Disconnected.
    08.07.09 17:31:19 ** Socket Error # 11004

    Решение проблемы с ошибкой 11004 на http://www.glob.com.au/sendmail неочевидное

    1. Владимир 09.07.2008 в 21:29 (Ответить)

      Вообще-то там решения нет. Они пишут, что проблема в dns сервере и советуют разбираться с провайдером.

      Попробуйте соединиться с сервером с помощью curl, например. Нужно как-то локализовать проблему. Если действительно что-то с dns, то скрипт настраивать можно очень долго.

      Появится еще информация, пишите. Я сам с такой проблемой не сталкивался.

    2. Игорь 14.11.2008 в 16:51 (Ответить)

      У меня было то же самое
      08.07.14 16:24:40 << +OK POP3 server at mail.ru signing off
      08.07.14 16:24:40 ** Disconnected.
      08.07.14 16:24:40 ** Disconnected.
      08.07.14 16:24:40 ** Disconnected.
      08.07.14 16:24:40 ** Connecting to smtp.mail.ru:25
      08.07.14 16:24:52 ** Disconnected.
      08.07.14 16:24:52 ** Disconnected.
      08.07.14 16:24:52 ** Disconnected.
      08.07.14 16:24:52 ** Connect timed out.

      Проверил порт SMTP: в Outlook'е стоял порт 2525, а в sendmail.ini : 25
      заменил 25 на 2525, перезапустил сервер и все пошло.

      Большое спасибо автору статьи.

  13. Alice 16.07.2008 в 10:09 (Ответить)

    А у меня так и не заработало..ошибка: 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 …

    вот,как я изменила sendmail.ini

    smtp_server=smtp.yandex.ru
    smtp_port=25
    default_domain=yandex.ru
    error_logfile=error.log
    debug_logfile=debug.log
    auth_username=мой_логин@yandex.ru auth_password=пароль
    pop3_server=pop.yandex.ru
    pop3_username=мой_логин@yandex.ru
    pop3_password=пароль
    force_sender=мой_логин@yandex.ru
    hostname=yandex.ru

    в php.ini поудаляла все после "=":
    SMTP =
    smtp_port =
    sendmail_from =
    еще есть строчка smtp_port =
    я пробовала и ничего не писать, и оставить"=25"

    Подскажите,пожалуйста,что не так.И где искать файлы debug.log и error.log?

    1. Volder 26.07.2008 в 17:40 (Ответить)

      в php.ini

      параметр sendmail_path
      выставили со ссылкой на sendmail.exe?

      1. Владимир 28.07.2008 в 16:38 (Ответить)

        Да,
        sendmail_path = "C:\wamp\sendmail\sendmail.exe -t"

  14. Владимир 28.07.2008 в 16:59 (Ответить)

    2Alice

    Добавьте в php.ini параметр
    sendmail_path = “C:\wamp\sendmail\sendmail.exe -t”

    (Нужно указать папку в которую вы распаковали sendmail). Файлы debug.log и error.log будут находится в этой же папке, но созданы они будут только при возникновении ошибок или записи отладочной информации.

    Кстати, каждый параметр должен быть записан с новой строки (в вашем комментарии имя и пароль - в одной строке).

    Попробуйте, не получится - пишите.
    P.S. Не забудьте перезапустить сервер после изменения php.ini

  15. Genadi 31.07.2008 в 12:03 (Ответить)

    У меня пишет что типа отправленно но письмо не пришодит ((

    1. Владимир 31.07.2008 в 16:19 (Ответить)

      А что написано в debug.log?

  16. Виталий 16.08.2008 в 13:13 (Ответить)

    Выполнил всё по данной рекомендации, написало, что сообщение отправлено, на получатель оно не доходит-debug.log

    08.08.16 14:08:38 ** — MESSAGE BEGIN —
    08.08.16 14:08:38 ** To: vvtivv@mail.ru
    08.08.16 14:08:38 ** Subject: Test
    08.08.16 14:08:38 ** From: hi-tec-lab@yandex.ru
    08.08.16 14:08:38 **
    08.08.16 14:08:38 ** Test Проверка отсылки письма!
    08.08.16 14:08:38 ** 12345678910
    08.08.16 14:08:38 ** ===================
    08.08.16 14:08:38 ** — MESSAGE END —
    08.08.16 14:08:38 ** Authenticating with POP3 server
    08.08.16 14:08:41 ** Connected.
    08.08.16 14:08:41 << +OK POP Ya! v1.0na
    08.08.16 14:08:41 >> CAPA
    08.08.16 14:08:41 << -ERR What?//Это место Не понятно???
    08.08.16 14:08:41 >> USER hi-tec-lab@yandex.ru
    08.08.16 14:08:41 << +OK password, please.
    08.08.16 14:08:41 >> PASS (My PAss)
    08.08.16 14:08:41 << +OK 0 message(s) 0 bytes.
    08.08.16 14:08:41 >> QUIT
    08.08.16 14:08:41 << +OK shutting down.
    08.08.16 14:08:41 ** Disconnected.
    08.08.16 14:08:41 ** Disconnected.
    08.08.16 14:08:41 ** Disconnected.
    08.08.16 14:08:41 ** Connecting to smtp.yandex.ru:25
    08.08.16 14:08:51 ** Disconnected.
    08.08.16 14:09:02 ** Disconnected.
    08.08.16 14:09:02 ** Disconnected.
    08.08.16 14:09:02 ** Disconnected.
    08.08.16 14:09:02 ** Connect timed out.

    1. Владимир 16.08.2008 в 16:02 (Ответить)

      CAPA - это команда по которой сервер должен вернуть список поддерживаемых им функций.
      В данном случае он возвращает ошибку (-ERR).

      Насколько я знаю, поддержку этой команды можно отключить в настройках сервера.

      Как заставить sendmail не отправлять эту команду я не знаю.
      Поэтому проще всего изменить сервер. Я проверял с mail.ru.

  17. Анна 18.08.2008 в 14:10 (Ответить)

    Что-то не срабатывает, может ли это быть из-за особенности настройки прокси сервера?
    08.08.18 15:05:05 ** — MESSAGE BEGIN —
    08.08.18 15:05:05 ** To: addres@mail.ru
    08.08.18 15:05:05 ** Subject: =?koi8-r?B?98/T09TBzs/XzMXOycUg0MHSz8zRIMkgzM/Hyc7B?=
    08.08.18 15:05:05 ** Content-Type: text/plain;
    08.08.18 15:05:05 ** MIME-Version: 1.0
    08.08.18 15:05:05 ** From: addres@mail.ru
    08.08.18 15:05:05 **
    08.08.18 15:05:05 **
    08.08.18 15:05:05 ** чЩ ЪБТЕЗЙУФТЙТПЧБМЙУШ ОБ УБКФЕ дПОофх.
    08.08.18 15:05:05 ** чБЫ ОПНЕТ: b59c67bf196a4758191e42f76670ceba.
    08.08.18 15:05:05 ** чБЫ МПЗ¦О: 1
    08.08.18 15:05:05 ** чБЫ РБТПМШ: 'RNbI'
    08.08.18 15:05:05 ** — MESSAGE END —
    08.08.18 15:05:05 ** Authenticating with POP3 server
    08.08.18 15:05:05 ** Connected.
    08.08.18 15:05:06 << +OK
    08.08.18 15:05:06 >> CAPA
    08.08.18 15:05:06 << +OK Capability list follows
    08.08.18 15:05:06 << TOPUSERLOGIN-DELAY 120PIPELININGEXPIRE NEVERUIDLIMPLEMENTATION Mail.Ru.
    08.08.18 15:05:06 >> USER addres@mail.ru
    08.08.18 15:05:06 << +OK Password required for user addres@mail.ru
    08.08.18 15:05:06 >> PASS password
    08.08.18 15:05:06 << +OK addres@mail.ru maildrop has 32 messages (31007744 octets)
    08.08.18 15:05:06 >> QUIT
    08.08.18 15:05:07 << +OK POP3 server at mail.ru signing off
    08.08.18 15:05:07 ** Disconnected.
    08.08.18 15:05:07 ** Disconnected.
    08.08.18 15:05:07 ** Disconnected.
    08.08.18 15:05:07 ** Connecting to smtp.mail.ru:25
    08.08.18 15:05:17 ** Disconnected.
    08.08.18 15:05:17 ** Disconnected.
    08.08.18 15:05:17 ** Disconnected.
    08.08.18 15:05:17 ** Connect timed out.

    1. Владимир 18.08.2008 в 17:32 (Ответить)

      Что-то я не понял. Вы письмо сами себе отправили?
      Поля To и From у вас одинаковые.
      Попробуйте отправить письмо на какой-нибудь другой ящик.

      1. Анна 19.08.2008 в 12:42 (Ответить)

        Я пробовала на разные адреса, просто в вопросе заменила их на addres@mail.ru

        1. Владимир 19.08.2008 в 15:30 (Ответить)

          Попробуйте использовать рекомендации от mail.ru
          (последний комментарий к этому посту).
          Судя по отчету, соединение с сервером происходит нормально, он возвращает количество писем в ящике (кстати, их действительно 32?). Но, после этого, с вашей стороны отправляется команда QUIT и сервер, естественно, отключается.

          1. Анна 20.08.2008 в 11:59 (Ответить) (Comments won't nest below this level)

            Писем действительно 32, рекомендациями из следующего поста пробовала воспользоваться - не помогло.

          2. Владимир 20.08.2008 в 18:57 (Ответить)

            В прошлом комментарии я ошибся. POP3 серверу действительно должна быть отправлена команда QUIT. Ошибка возникает после подключения к SMTP.

            Вот мой лог, начиная с подключения к SMTP
            08.08.20 19:33:30 ** Connecting to smtp.mail.ru:25
            08.08.20 19:33:31 ** Connected.
            08.08.20 19:33:31 << 220 proline.net.ua, ESMTP EXIM 4.67<EOL>
            08.08.20 19:33:31 >> EHLO mail.ru<EOL>
            08.08.20 19:33:31 << 250-proline.net.ua Hello mail.ru [80.93.122.16]<EOL>250-SIZE 31457280<EOL>250-PIPELINING<EOL>250-STARTTLS<EOL>250 HELP<EOL>
            08.08.20 19:33:31 ** Authenticating as adres@mail.ru
            08.08.20 19:33:31 >> MAIL FROM: <adres@mail.ru><EOL>
            08.08.20 19:33:31 << 250 OK<EOL>
            08.08.20 19:33:31 >> RCPT TO: <adres@ukr.net><EOL>
            08.08.20 19:33:31 << 250 Accepted<EOL>
            08.08.20 19:33:31 >> DATA<EOL>
            08.08.20 19:33:31 << 354 Enter message, ending with "." on a line by itself<EOL>
            08.08.20 19:33:31 >> Date: Wed, 20 Aug 2008 19:33:31 +0300<EOL>
            08.08.20 19:33:31 >> To: adres@ukr.net<EOL>
            08.08.20 19:33:31 >> Subject: test<EOL>
            08.08.20 19:33:31 >> From: adres@mail.ru<EOL>
            08.08.20 19:33:31 >> <EOL>
            08.08.20 19:33:31 >> test test test<EOL>
            08.08.20 19:33:31 >> .<EOL>
            08.08.20 19:33:38 << 250 OK id=1KVqbL-000JIi-3R<EOL>
            08.08.20 19:33:38 >> QUIT<EOL>
            08.08.20 19:33:38 << 221 proline.net.ua closing connection<EOL>
            08.08.20 19:33:38 ** Disconnected.
            08.08.20 19:33:38 ** Disconnected.
            08.08.20 19:33:38 ** Disconnected.

            Честно говоря, не ясно в чем ошибка. Т.е. описание ошибки есть (Connect timed out. - Превышено время ожидания соединения), но из-за чего она возникает - не ясно.
            В большинстве случаев это означает либо проблемы со связью, либо проблемы с настройками. Но в данном случае первая причина отпадает сразу (вы бы не соединились с POP сервером), вторая, судя по логу, тоже (конечно, стоит проверить настройки еще раз).
            Может быть не отвечает сервер mail.ru, но сегодня я проверял - все работало.

            В общем, попробуйте использовать другой smtp.

          3. Игорь 14.11.2008 в 17:09 (Ответить)

            У меня было то же самое

            Проверил порт SMTP: в Outlook'е стоял порт 2525, а в sendmail.ini : 25
            заменил 25 на 2525, перезапустил сервер и все пошло.

            Большое спасибо автору статьи.

  18. Виталий 19.08.2008 в 10:12 (Ответить)

    Рекомендации от команды mail.ru
    Иногда помогает указать IP-адреса: вместо pop.mail.ru - 194.67.23.102,
    smtp.mail.ru - 194.67.23.111

    pop.inbox.ru - 194.67.23.6, smtp.inbox.ru - 194.67.23.113
    pop.bk.ru - 194.67.23.8, smtp.bk.ru - 194.67.23.114
    pop.list.ru - 194.67.23.159, smtp.list.ru - 194.67.23.115

    Измените порт SMTP c 25 на порт 2525 или 587.

    Увеличте время таймаутов в вашей почтовой программе.

    Если все это не помогло, то попробуйте использовать для отправки SMTP
    сервер Вашего провайдера.
    ————————————————-
    У меня установлен сервер xammp, вот его настройки:
    php.ini
    ———–
    sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"
    ————————————————-
    sendmail.ini
    ———–
    [sendmail]

    smtp_server=194.67.23.111

    smtp_port=2525

    default_domain=mail.ru

    error_logfile=error.log

    debug_logfile=debug.log

    auth_username=ВАШЕ ИМЯ@mail.ru
    auth_password=ВАШ ПАСС

    pop3_server=pop.mail.ru
    pop3_username=ВАШЕ ИМЯ@mail.ru
    pop3_password=ВАШ ПАСС

    force_sender=ВАШЕ ИМЯ@mail.ru

    hostname=mail.ru

  19. Сергей 20.08.2008 в 22:40 (Ответить)

    защита от спама иногда почту принимает с n_ного раза, из очереди, таким образом происходит борьба с почтовыми прогами спамеров, которые шуруют в 5 потоков по 100шт в минуту(в среднем)

    1. Владимир 21.08.2008 в 13:20 (Ответить)

      Вывод - нужен собственный SMTP сервер, особенно если почты много.

  20. Виталий 21.08.2008 в 22:49 (Ответить)

    Обязательно нужен отличный(другой)вариант от sendmail,
    только,где его взять для собственного хостинга,
    на прова надеятся нет смысла,там свои проблемы.
    Пробую пользовать бесплатный CourierMS 1.53…
    скажем так себе, хотя версии современнее многообещающие,
    триал, типа на 3 пользователя, даже с одним не работают
    во внешке…а покупать, конечно можно и приобрести,
    только для чего, ради отсылки писем, проще предоставить
    пользователю регистрацию без проверки email, последнее
    мне самому не очень нравится(мысли вслух)

  21. Jenya 06.09.2008 в 18:19 (Ответить)

    Помогите плиз!!
    Всёравно вылазит ошибка:
    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() on line 230
    Вот что у меня в php.ini :
    SMTP =
    sendmail_path ="C:\AppServ\sendmail\sendmail.exe -t"
    (Юзаю AppServ, кстати пример простого скрипта в этой статье неправильный, пишет какую-то ошибку в строке 13)..
    ещё такой ньюанс у меня самого файла php.ini нету, а есть php.ini-dist и php.ini-recommended. В них я настройки и изменял, почта всё-равно не отправляется..

    1. Владимир 06.09.2008 в 22:02 (Ответить)

      Вам нужно разобраться какой php.ini используется. Возможно вам нужно переименовать php.ini-recommended в php.ini.
      Проще всего проверить так. Подключить в php.ini какую-нибудь библиотеку и посмотреть что выводит phpinfo().
      Судя по описанию ошибки php пытается отправить почту через smtp сервер, который установлен на localhost порт 25. Очень похоже, что ваши настройки не применяются вообще.

  22. [...] Сегодня я буду порассказать вам самый простой способ поднять бабла - rav4click.ru Конкурс: бесплатная баннерная реклама для блоггеров. PHP mail под Windows. Отправка почты из PHP скриптов. [...]

  23. Иван 10.09.2008 в 23:41 (Ответить)

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

    Настроил php.ini

    [mail function]
    ; For Win32 only.

    ;SMTP = smtp.mail.ru
    ;smtp_port = 25

    ; For Win32 only.
    ;sendmail_from =

    ; For Unix only. You may supply arguments as well (default: "sendmail -t -i").

    sendmail_path ="C:\sendmail\sendmail.exe -t"

    Настроил sendmail.ini

    [sendmail]

    smtp_server=smtp.mail.ru
    smtp_port=25
    default_domain=mail.ru

    error_logfile=error.log
    debug_logfile=debug.log

    auth_username=my@mail.ru
    auth_password=mypass

    pop3_server=pop.mail.ru
    pop3_username=my@mail.ru
    pop3_password=mypass

    force_sender=my@mail.ru
    hostname=mail.ru

    Вот что кажет debug.log

    08.09.11 01:11:02 ** — MESSAGE BEGIN —
    08.09.11 01:11:02 ** To: my@mail.ru
    08.09.11 01:11:02 ** Subject: Ltj Bukem
    08.09.11 01:11:02 ** From: "рпарпара"
    08.09.11 01:11:02 ** Content-Type: text/plain; charset="windows-1251"
    08.09.11 01:11:02 ** Return-path:
    08.09.11 01:11:02 **
    08.09.11 01:11:02 ** jjbg
    08.09.11 01:11:02 ** khvj
    08.09.11 01:11:02 ** kb
    08.09.11 01:11:02 ** — MESSAGE END —
    08.09.11 01:11:02 ** Authenticating with POP3 server
    08.09.11 01:11:02 ** Connected.
    08.09.11 01:11:02 << +OK
    08.09.11 01:11:02 >> CAPA
    08.09.11 01:11:02 << +OK Capability list follows
    08.09.11 01:11:03 << TOPUSERLOGIN-DELAY 120PIPELININGEXPIRE NEVERUIDLIMPLEMENTATION Mail.Ru.
    08.09.11 01:11:03 >> USER my@mail.RU
    08.09.11 01:11:03 << +OK Password required for user my@mail.ru
    08.09.11 01:11:03 >> PASS mypass
    08.09.11 01:11:03 << +OK my@mail.ru maildrop has 292 messages (128862208 octets)
    08.09.11 01:11:03 >> QUIT
    08.09.11 01:11:03 << +OK POP3 server at mail.ru signing off
    08.09.11 01:11:03 ** Disconnected.
    08.09.11 01:11:03 ** Disconnected.
    08.09.11 01:11:03 ** Disconnected.
    08.09.11 01:11:03 ** Connecting to 194.67.23.111:25
    08.09.11 01:11:13 ** Disconnected.
    08.09.11 01:11:13 ** Disconnected.
    08.09.11 01:11:13 ** Disconnected.
    08.09.11 01:11:13 ** Connect timed out.

    Вот что кажет error.log APACHE

    sendmail: Error during delivery: Connect timed out.

    Пробывал и другие серваки, результат один - отрицательный. Может у кого-то было такое?

    1. Владимир 11.09.2008 в 16:50 (Ответить)

      Судя по логу. Вы подключились к POP серверу, но не смогли к SMTP (превышен интервал ожидания запроса, т.е. сервер попросту не ответил).
      Попробуйте подключиться к нему с помощью telnet
      telnet 194.67.23.111 25

      Как вы подключены к интернет? Не используете прокси серверов? Почтовые программы (theBat, outlook) почту отправляют?

  24. Иван 11.09.2008 в 17:15 (Ответить)

    Интернет на прямую, никаких прокси!
    При попытке подключится по telnet вот что вышло:

    C:\Documents and Settings\>telnet 194.67.23.111 25
    Подключение к 194.67.23.111…Не удалось открыть подключение к этому узлу, на порт 25: Сбой подключения

    По вашей рекомендации запустил Outlook правда Express но все же. При отправке выдает ошибку:

    Ошибка при соединении с сервером. Учетная запись: 'pop.mail.ru', Сервер: 'smtp.mail.ru', Протокол: SMTP, Порт: 25, Защита (SSL): Нет, Ошибка сокета: 10060, Код ошибки: 0×800CCC0E

    Однако все письма что лежали на сервере mail.ru пришли ко мне. Первый раз такое, что то наверное с настройками, только чего именно…

  25. Иван 11.09.2008 в 19:34 (Ответить)

    Поставил галочку "Проверка подлинности", почта стала отправляться. Теперь как эту авторизацию настроить в sendmail? Я все делал так как написано тут у вас, но почта не ходит (((

  26. Иван 11.09.2008 в 19:56 (Ответить)

    Ура я решил проблему.

    вот тут:

    auth_username=my@mail.ru
    нужно писать вот таак
    auth_username=my
    т.е. просто указать логин.

    Всем спасибо!

  27. Владимир 12.09.2008 в 18:18 (Ответить)

    Мои поздравления :-)
    Похоже в настройках сервера mail.ru произошли изменения. Когда я тестировал скрипт, настройки были именно такие как я привел в статье (я их просто скопипастил).
    Но вообще ваш вариант правильнее. username - это имя пользователя (my), а не адрес email (my@mail.ru).

    1. Иван 12.09.2008 в 18:23 (Ответить)

      На самом деле я это сделал на работе и все работало. пришел домой и опять не работает, я выпал в осадок!
      Оказывается мой провайдер akado.ru вообще закрыл доступ к любим сервакам по smtp : 25. В тек поддержке мне сказали юзайте mail.akado.ru.
      Для чего они это сделали не понятно. Создал ящик на акадо все ходит ) Прошу прощения всех кого ввел в заблуждения! Всем спасибо.

      1. Владимир 12.09.2008 в 18:43 (Ответить)

        Как чувствовал, что что-то (кто-то) блокирует smtp :-)
        Большой привет провайдеру.

  28. Владимир 25.09.2008 в 13:04 (Ответить)

    Здравствуйте, решил отправить сообщение через mail(). Ничего не получалось пока не наткнулся на эту статью. Потом настроил всё это, получилось. Пишет "Сообщение отправлено". Но куда не пытаюсь отправить сообщение, оно не приходит и всё.
    З.Ы. && заменил на &&. Скрипт вроде норм :)

  29. Владимир 25.09.2008 в 13:26 (Ответить)

    А вот и лог.

    ########################################
    08.09.25 18:21:17 ** — MESSAGE BEGIN —
    08.09.25 18:21:17 ** To: address@ya.ru
    08.09.25 18:21:17 ** Subject: lo6ara
    08.09.25 18:21:17 ** From: LO6ara
    08.09.25 18:21:17 **
    08.09.25 18:21:17 ** lo6ara
    08.09.25 18:21:17 ** — MESSAGE END —
    08.09.25 18:21:17 ** Authenticating with POP3 server
    08.09.25 18:21:17 ** Connected.
    08.09.25 18:21:17 << +OK POP Ya! v1.0na
    08.09.25 18:21:17 >> CAPA
    08.09.25 18:21:17 << -ERR What?
    08.09.25 18:21:17 >> USER name
    08.09.25 18:21:17 << +OK password, please.
    08.09.25 18:21:17 >> PASS *************
    08.09.25 18:21:17 << +OK 0 message(s) 0 bytes.
    08.09.25 18:21:17 >> QUIT
    08.09.25 18:21:17 << +OK shutting down.
    08.09.25 18:21:17 ** Disconnected.
    08.09.25 18:21:17 ** Disconnected.
    08.09.25 18:21:17 ** Disconnected.
    08.09.25 18:21:17 ** Connecting to smtr.yandex.ru:25
    08.09.25 18:21:27 ** Disconnected.
    08.09.25 18:21:27 ** Disconnected.
    08.09.25 18:21:27 ** Disconnected.
    08.09.25 18:21:27 ** Connect timed out.
    ###########################################

    1. Владимир 25.09.2008 в 13:56 (Ответить)

      У вас в логе
      Connecting to smtr.yandex.ru:25
      а должно быть
      Connecting to smtp.yandex.ru:25
      Исправляйте sendmail.ini

      1. DDoS 20.10.2008 в 03:08 (Ответить)

        Владимир, если вам не трудно помогите. Скрипт не пашет почему не пйму, в логах sendmail нет ни чего, при отправке сообщения бросто все сбрасывается. Пользуюсь Apache2.2

        1. Владимир 20.10.2008 в 20:00 (Ответить)

          Пришлите, пожалуйста, скрипт который запускаете (сам файл). vova_33 [собака] gala.net

  30. [...] на блогах:PHP mail под Windows. Отправка почты из PHP скриптовКак создать облако тегов для своего сайта на [...]

  31. Polina 30.10.2008 в 19:04 (Ответить)

    ошибка, пожалуйста помогите.

    Not Found

    The requested URL /rassylka/mailer.php was not found on this server.
    Apache/2.0.63 (Win32) PHP/5.2.1 Server at localhost Port 80

  32. Oleg 31.10.2008 в 13:17 (Ответить)

    Возможно, скрипт (который выше представлен) Вы разместили на Вашем сервере НЕ в /rassylka/mailer.php ! В общем если так, то или переименуйте Ваш скрипт в mailer.php или замените в нём form action="sendmail.php" на название вашего скрипта.

  33. Oleg 31.10.2008 в 13:19 (Ответить)

    Упс… А редактировать нельзя, как я понял…
    В общем надо было так:

    или замените в нём form action="mailer.php" на название вашего скрипта.

  34. Oleg 31.10.2008 в 13:44 (Ответить)

    Что-то тоже мои письма не доходят… Не пойму. Уж как только не крутил настройки, перезапуская каждый раз Apache… И причём в папке с sendmail.php не создаются error.log и debug.log. Когда сам создал - то они всё равно не заполняются ничем… :( Вот такое было в sendmail.ini на момент написание этого вопросика:

    smtp_server=smtp.list.ru
    smtp_port=2525
    default_domain=list.ru
    error_logfile=error.log
    debug_logfile=debug.log
    auth_username=имя_почтового_ящика
    auth_password=пароль_почтового_ящика
    pop3_server=pop.list.ru
    pop3_username=имя_почтового_ящика
    pop3_password=пароль_почтового_ящика
    force_sender=адрес_моего_почтового_ящика
    hostname=list.ru

    …Почему непойму…

    1. Владимир 31.10.2008 в 20:14 (Ответить)

      Проверьте еще раз php.ini, там должно быть:

      SMTP =
      sendmail_from =
      sendmail_path = "C:\wamp\sendmail\sendmail.exe -t"

      В последней строке нужно указать ваш путь к sendmail

      Не sendmail.php, а sendmail.exe. Логи могут не создаваться по двум причинам:
      1) отсутствуют права на запись в папку с логами;
      2) sendmail не запускается вообще.

      1. Oleg 01.11.2008 в 08:13 (Ответить)

        Да, ну это понятно, конечно, что sendmail.exe!!! :-) Всё это дело у меня на моём компе дома. ОС - Windows XP, вроде тут с правами не должно быть проблем. Во всяком случае php может создавать, удалять, редактировать файлы и папки. Путь к sendmail.exe указал (я его запихнул в Program Files, может лучше в папку с самим php скопировать?)
        Вот php.ini у меня (то, что относится к mail):
        SMTP =
        smtp_port =
        sendmail_from =
        sendmail_path = "C:\Program Files\sendmail\sendmail.exe -t"
        ;mail.force_extra_parameters =
        Может это из-за пробела в пути (ну, Progam[пробел]Files)???

        1. Владимир 01.11.2008 в 22:27 (Ответить)

          Да, пробел однозначно лучше убрать.
          Вся строка заключена в кавычки, поэтому он может считать, что со слова Files начинаются параметры.

          Папка с:\sendmail\ вполне подойдет ;)

  35. Polina 31.10.2008 в 14:41 (Ответить)

    спасибо, разобралась)) только сам метод mail не отправляет: возвращает false в чем может быть причина?

  36. Polina 31.10.2008 в 20:26 (Ответить)

    Проверила, усе так, но "При отправке сообщения возникла ошибка"
    1) отсутствуют права на запись в папку с логами; - a как это проверить?
    заранее спасибо

    1. Владимир 31.10.2008 в 21:21 (Ответить)

      Какая операционка? Windows или Linux?

  37. Polina 01.11.2008 в 09:49 (Ответить)

    windows OC

    1. Владимир 01.11.2008 в 22:33 (Ответить)

      Тогда, скорее всего, права на запись у вас есть :-) Если вы сами можете создать файл в папке с sendmail, то точно есть.

      Проверьте еще раз настройки в php.ini и sendmail.ini. Если ошибки не найдете присылайте мне эти два файла и ваш скрипт почтой (vova_33[at]gala.net).

  38. Oleg 02.11.2008 в 09:12 (Ответить)

    Ура! В другой папке (без пробелов) - заработало! :)

  39. Polina 04.11.2008 в 12:07 (Ответить)

    Народ, что может сие означать?
    08/11/04 13:04:18 ** Disconnected.
    08/11/04 13:04:18 ** sender address must match authenticated user

    1. Oleg 04.11.2008 в 14:29 (Ответить)

      Вы просто скопировали скрипт, который представлен в этой теме вверху? Если да поменяйе:
      mail($addr, $theme, $text, "From: vova_33@mail.ru") - замените vova_33@mail.ru на Ваш почтовый адрес.

    2. Владимир 04.11.2008 в 18:03 (Ответить)

      sender address must match authenticated user
      адрес отправителя должен совпадать с адресом авторизовавшегося пользователя

  40. Polina 04.11.2008 в 20:48 (Ответить)

    ага разобралась, когда меняла с gmail на mail в sendmail.ini не везде ящик поменяла))

  41. новости 05.11.2008 в 10:31 (Ответить)

    Круто! Все получилось!

  42. Саша 15.11.2008 в 13:58 (Ответить)

    Помогите пожалоста подключить gmail к sendmail - уже несколько дней безуспешніх поисков,,,(((

    файл конфигурации выглядет так:

    [sendmail]

    smtp_server=smtp.gmail.com

    smtp_port=465

    default_domain=gmail.com
    error_logfile=error.log
    debug_logfile=debug.log
    auth_username=kurier.online@gmail.com
    auth_password=2k******
    pop3_server=pop.gmail.com
    pop3_username=kurier.online@gmail.com
    pop3_password=2k.*****
    force_sender=kurier.online@gmail.com
    hostname=gmail.com

    некоторые параметры взяти с этой статьи

    http://mail.google.com/support/bin/answer.py?answer=13287
    Согласно инструкций включил РОР на миле.

    В debug.log постоянно следующее записи

    08.11.15 13:57:13 ** — MESSAGE BEGIN —
    08.11.15 13:57:13 ** To: back.sasha@gmail.com
    08.11.15 13:57:13 ** Subject: тут пишеш тему листа
    08.11.15 13:57:13 ** From: kurier.online@gmail.com
    08.11.15 13:57:13 **
    08.11.15 13:57:13 ** Це з мого сервака
    08.11.15 13:57:13 ** — MESSAGE END —
    08.11.15 13:57:13 ** Authenticating with POP3 server
    08.11.15 13:57:23 ** Disconnected.
    08.11.15 13:57:23 ** Disconnected.
    08.11.15 13:57:23 ** Disconnected.
    08.11.15 13:57:23 ** Connect timed out.

    Делал для маил ру - прекрасно пашет но с gmail никак

  43. Саша 15.11.2008 в 14:01 (Ответить)

    был бы очень благодарен за пример файла с работающими настройками

  44. Владимир 15.11.2008 в 16:05 (Ответить)

    Если я не ошибаюсь, сейчас к smtp серверу gmail подключиться нельзя.
    Попробуйте другой сервер.

  45. Саша 15.11.2008 в 16:39 (Ответить)

    Значит невозможно. А Вы (Владимир) говорите сейчас - значит это временно?
    Мне тут расказивали в хостподдержке об использовании pop3s в гугле. говорили вот так:
    Цитата - "Скорее всего, тот сендмейл, о котором вы пишете не поддерживает соединение через ssl, а gmail требует ssl."

    Тоесть возможно есть другие новее версии даной програмы что поддерживают ssl.

    Вы говорите временно - я просто не понял рамок - это было раньше но сейчас нет???.. Пожалоста скажите точнее.

    1. Владимир 16.11.2008 в 14:31 (Ответить)

      Я имел ввиду, что раньше работало, а сейчас они отключили. Дело в том, что сам я не пробовал подключаться. Просто видел старый топик на каком-то форуме. Там было описание настроек и через несколько месяцев комментарий, что тема (работа с smtp) уже не актуальна.

      POP3 у них работает однозначно, но он предназначен для получения почты, т.е. вы можете настроить Outlook, The Bat! и т.п. софт для получения почты без входа на сайт.

      Для отправки почты нужен доступ к SMTP серверу.

      Насчет ssl я не уверен, по-моему в настройках gmail его можно отключить.

      В любом случае не вижу смысла возиться. Описанный здесь вариант отправки писем хорошо подходит для тестирования приложений, а тут без разницы какой почтовый ящик использовать (mail.ru или gmail). В рабочем варианте отправка будет скорее всего через SMTP сервер хостера или ваш собственный.

  46. Саша 17.11.2008 в 00:55 (Ответить)

    да в том и дело что я начинающий хостер - настроил сервак нормально а почта галимая - стандартная виндовская - не на все ищвесные почтовики доходит - на gmail, mail.ru, bigmir доходит на ukr.net например никак. Но всеравно огромное спасиба вам за ответ и за статью.

    Кстати а вы не знаете как правильно подключить к виндовской почте… windows server 2003
    буду очень благодарен за ответ или ссылку на него.

    1. Владимир 17.11.2008 в 18:45 (Ответить)

      как правильно подключить к виндовской почте…

      Честно говоря, нет. Один раз настраивал почтовый сервер под Win2003, но это был Kerio Mail Server. Проблем с ним не было, правда и нагрузка была совсем небольшая.

Оставить комментарий

Введите ваш комментарий

* - обязательные для заполнения поля

Quicktags:

]]>