За чистый и ясный код!

Статьи на тему программирования под веб, используя PHP, MySQL, Jquery и многое другое

Отправка почты через sendmail в ОС Windows

Февраль23

Всем привет!

Наверняка многие использовали и используют функцию mail() для отправки сообщение e-mail. Но в ОС Windows невозможно отправить почту используя только скрипты php и эту ф-цию. Нужны программные средства:

1 Установить полноценный почтовый сервер, например Kerio Connect (не реклама)
2 Использовать скрипты (классы) для работы с почтой: Zend_mail, PHPmailer и т.д.
3 Установить готовые веб-серверы типа Денвер, XAMPP
4 Воспользоваться эмуляцией демона sendmail для OS Windows

Пока не поздно подумаем о лете и ЖАРЕ, присмотримся к кондиционерам, vrf системы — наше спасение.

Лично я не любитель использовать собранные проекты, такие как Денвер, XAMPP и им подобным. Люблю использовать то, что будет жить на сервере, т.е. по-отдельности устанавливаю сервисы. Устанавливать какой-то мыльный сервере, тоже не охота — его нужно ломать (большинство платные), настраивать и тд. Что же делать?

На помощь пришел 4-й пункт! Качаем, распаковываем, и начинаем настройку.

Настройка sendmail.ini

И так в созданном каталоге будет файл sendmail.ini, его и надо править — это главный файл конфигурации:

; configuration for fake sendmail

; if this file doesn't exist, sendmail.exe will look for the settings in
; the registry, under HKLM\Software\Sendmail

[sendmail]

; you must change mail.mydomain.com to your smtp server,
; or to IIS's "pickup" directory.  (generally C:\Inetpub\mailroot\Pickup)
; emails delivered via IIS's pickup directory cause sendmail to
; run quicker, but you won't get error messages back to the calling
; application.

smtp_server=smtp.mail.ru

; smtp port (normally 25)

smtp_port=2525

; SMTPS (SSL) support
;   auto = use SSL for port 465, otherwise try to use TLS
;   ssl  = alway use SSL
;   tls  = always use TLS
;   none = never try to use SSL

smtp_ssl=auto

; the default domain for this server will be read from the registry
; this will be appended to email addresses when one isn't provided
; if you want to override the value in the registry, uncomment and modify

default_domain=mail.ru

; log smtp errors to error.log (defaults to same directory as sendmail.exe)
; uncomment to enable logging

error_logfile=error.log

; create debug log as debug.log (defaults to same directory as sendmail.exe)
; uncomment to enable debugging

debug_logfile=debug.log

; if your smtp server requires authentication, modify the following two lines

auth_username=your_login@mail.ru
auth_password=your_password

; if your smtp server uses pop3 before smtp authentication, modify the 
; following three lines.  do not enable unless it is required.

pop3_server=
pop3_username=
pop3_password=

; force the sender to always be the following email address
; this will only affect the "MAIL FROM" command, it won't modify 
; the "From: " header of the message content

force_sender=your_login@mail.ru

; force the sender to always be the following email address
; this will only affect the "RCTP TO" command, it won't modify 
; the "To: " header of the message content

force_recipient=

; sendmail will use your hostname and your default_domain in the ehlo/helo
; smtp greeting.  you can manually set the ehlo/helo name if required

hostname=mail.ru

где
smtp_server — сервер отправки почты;
smtp_port — порт сервера;
smtp_ssl — использование сертификата, если не знаете пусть будет auto;
default_domain — основной домен для сервера отправки сообщения;
error_logfile — лог-файл ошибок, название любое, даже можно написать путь, где будет храниться файл;
debug_logfile — лог-файл отладочной информации (деббагер) в нем видно все «разговоры» с сервером;
auth_username и auth_password — данные авторизации на сервере;
force_sender — от кого будет послано сообщение;
force_recipient — кому будет послано, но оставляем пустым, т.к. эту инфу указываем в скрипте;
hostname — ставим такое же, как и default_domain.

Хочу напомнить, что не все серверы, из-за спама, разрешают их юзать, например при написании статьи я попытался подключиться к smtp.yandex.ru:25 ничего не вышло, кол-во писем в ящике показывает, но не отправляет.
Иная ситуация с smtp.mail.ru:2525, причем порт не по-умолчанию, стандартные тоже не работал, но в помощи, на сайте, написано, что есть два других порта, я воспользовался и получилось.

Настройка php.ini

Находим секцию [mail function]

[mail function]
; For Win32 only.
; SMTP = localhost
; smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

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

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
; mail.force_extra_parameters =

комментируем все строки, кроме пути к sendmail, в этом пути прописываем полный путь к бинарнику.

Пишем простейший скрипт

<?php
mail('to_your_friend@server.com', 'My Subject', 'My message');

ну пояснять тут ничего не буду, самый первый линк этой статьи видет на пояснения.

Разбор логов

10.02.23 20:09:32 ** --- MESSAGE BEGIN ---
10.02.23 20:09:32 ** To: to_your_friend@server.com
10.02.23 20:09:32 ** Subject: My Subject
10.02.23 20:09:32 ** 
10.02.23 20:09:32 ** My message
10.02.23 20:09:32 ** --- MESSAGE END ---
10.02.23 20:09:32 ** Connecting to smtp.mail.ru:2525
10.02.23 20:09:33 ** Connected.
10.02.23 20:09:33 << 220 mail.ru ESMTP Tue, 23 Feb 2010 20:09:33 +0300<EOL>
10.02.23 20:09:33 >> EHLO mail.ru<EOL>
10.02.23 20:09:33 << 250-mx34.mail.ru Hello mail.ru [xxx.xxx.xxx.xxx]<EOL>250-SIZE 31457280<EOL>250-8BITMIME<EOL>250-AUTH PLAIN LOGIN<EOL>250 PIPELINING<EOL>
10.02.23 20:09:33 ** Authenticating as your_login@mail.ru
10.02.23 20:09:33 >> AUTH LOGIN<EOL>
10.02.23 20:09:33 << 334 VXNlcm5hbWU6<EOL>
10.02.23 20:09:33 >> bmFnYXljaGVua29AbWFpbC5ydQ==<EOL>
10.02.23 20:09:33 << 334 UGFzc3dvcmQ6<EOL>
10.02.23 20:09:33 >> c2V4c2hvcA==<EOL>
10.02.23 20:09:33 << 235 Authentication succeeded<EOL>
10.02.23 20:09:33 >> MAIL FROM: <your_login@mail.ru><EOL>
10.02.23 20:09:33 << 250 OK<EOL>
10.02.23 20:09:33 >> RCPT TO: <to_your_friend@server.com><EOL>
10.02.23 20:09:33 << 250 Accepted<EOL>
10.02.23 20:09:33 >> DATA<EOL>
10.02.23 20:09:33 << 354 Enter message, ending with "." on a line by itself<EOL>
10.02.23 20:09:33 >> Date: Tue, 23 Feb 2010 19:09:33 +0200<EOL>
10.02.23 20:09:33 >> To: to_your_friend@server.com<EOL>
10.02.23 20:09:33 >> Subject: My Subject<EOL>
10.02.23 20:09:33 >> <EOL>
10.02.23 20:09:33 >> My message<EOL>
10.02.23 20:09:33 >> .<EOL>
10.02.23 20:09:34 << 250 OK id=1NkBNF-000BaE-00<EOL>
10.02.23 20:09:34 >> QUIT<EOL>
10.02.23 20:09:34 << 221 mx34.mail.ru closing connection<EOL>
10.02.23 20:09:34 ** Disconnected.
10.02.23 20:09:34 ** Disconnected.
10.02.23 20:09:34 ** Disconnected.

Это вид простейшего лога. Ессно все параметры типа легальное мыло, домены, ай-пи адреса я заменил на вымышленные, что бы потом меня не спамили.

Ну и в ответ, на своем почтовом ящике, куда я послал почту я её и получил.

Сам сервис для отправка почты через sendmail в ОС Windows можете взять тут

Удачи, пиши отзывы, кликайте на рекламу )))

Статья просмотренна 60588 раз, зашло посетителей 21782

рубрика: PHP

21 комментарий в “Отправка почты через sendmail в ОС Windows”

  1. Avatar
    Вячеслав пишет:

    извини, но статья не раскрыта!можно было и поподробнее написать!


  2. Avatar
    maxnag пишет:

    А что там описывать, есть бинарник, к нему конфиг, показал как настроить. Работает. Что не так????? Положить в рот и разжевать?


  3. Avatar
    Гость пишет:

    Конечно!


  4. Avatar
    maxnag пишет:

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


  5. Avatar
    Гость пишет:

    заебали со своими девелоперами! Есть правило в русском языке, которое запрещает использование иностранных слов, когда есть русский аналог. РАЗРАБОТЧИК, а не девелопер!!!


  6. Avatar
    maxnag пишет:

    Да, такое слово есть, не спорю.
    Целый день, мы — разработчики работаем со специфической литературой которая написана на английском языке (90%), также разговариваем с клиентами и для нас эти слова, девелопер, инстанс, полиси, нода и прочее стали "родные" и понятные, а зачем их переводить на свой язык, если мы, в своём круге, понимаем друг друга? И данный блог, простите дневник, предназначен для этого круга людей.
    Иногда я сам думаю, чего я пишу ишью, если могу написать задание (проблема), но такова специфика работы. В блоге посвященному русскому языку такого не должно быть, а здесь будет.

    ЗЫ в последнее время на работе я всё пишу на английском и граница между двумя языками исчезает для меня.


  7. Avatar
    Genrih пишет:

    Помогите мне объяснить как можно настроить sendmail на одном сервере ,чтоб можно было несколько отправителей , типо 4 сайта на сервере , но в php.ini и в sendmail только можно одного отправителя вписать со всеми настройками ,или нужно под каждого отправителя отдельный движек sendmail ?


  8. Avatar
    maxnag пишет:

    Советую Вам более подробно изучить что такое http://ru.wikipedia.org/wiki/Sendmail и вам всё станет ясно. Он умеет делать всё.


  9. Avatar
    zed212 пишет:

    Приветствую!!! судя по статье так она про Sendmail в нэти везде одинаковая чтобы снять заглушку надо приминить
    username=
    password=
    вот или я бестолковый или лыжи едут, username= и password= чего надо в водить smtp адреса от которого будит идти рассылка или отправка писем если да то опять не то, вот подскажите кто знает вот к примеру у меня внешний айпишник то есть ip статический возьмём к примеру локал хост денвер ну что хамп что денвер у них в sendmail заглушка стоит, вот установил я к примеру денвер ip провайдера внешний тоесть сервак в нэти через ip доступин виден, вот установил я к примеру денвер, вот каким макаровым мне снять заглушку в sendmail не таким способом как выше а без username= и password= то и есть по другому говоря есть скрипт(ы) php формата анонимной отправки писем, с хостингов они работают но банятся, вот как мне настроить или какой установить sendmail чтоб php скрипт анонимнай отправки писем отправлялся с компа с локального сервака sendmail может тут кто подскажет???


  10. Avatar
    Никита пишет:

    Программа sendmail которую мы скачивали в 4-ом пункте она бесплатная или ломаная?


  11. Avatar
    maxnag пишет:

    Бесплатная, можете юзать, для тестов самое оно.


  12. Avatar
    Никита пишет:

    Спасибо за статью, все очень понятно. Получилось с первого раза настроить. Весь инет до этого облазил нигде толкового описания нет. Кстати прога какие нибудь ограничения имеет?


  13. Avatar
    maxnag пишет:

    Пожалуйста. На продакшене у вас врятли будет Windows, а это прога просто эмулирует работы подобной проги в *nix системах.
    Она для тех кто по каким-то причинам не хочет переходить на Linux, являясь программистом PHP, а остаётся на Windows.


  14. Avatar
    Сергей пишет:

    Спасибо! Работает.


  15. Avatar
    Алекс пишет:

    как присоединить файл архив к письму?


  16. Avatar
    maxnag пишет:

    Привет, всё очень просто — вот тут описано


  17. Avatar
    Tucopot пишет:

    спасибо!


  18. Avatar
    Юрец пишет:

    А без smtp сервера mail.ru? чтобы оно само? как на линукс — нажал mail() и оно ушло (на линукс разумеется установлен postfix), вот и ищу ему альтернативу под винду, так чтоб сам отправлял в инет, а не через сторонние сервисы


  19. Avatar
    maxnag пишет:

    Используй Linux


  20. Avatar
    Spasibo!! пишет:

    Спасибо большое!!! 3 дня подряд не смог сделать


  21. Avatar
    maxnag пишет:

    Удачи!


не публикуется

пример

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

  

Облако тегов

cli csv dump events form Kohana locale models MySQL mysqldump orm PHP tools trigger validate газ газовый счетчик итоги кеширование переменные

Облако тегов плагина WP Cumulus для WordPress требует для просмотра Flash Player 9 или выше.

Я на твиттере!

  • у твиттера тоже бывают перерывы...

Календарь

Февраль 2010
Пн Вт Ср Чт Пт Сб Вс
« Янв   Мар »
1234567
891011121314
15161718192021
22232425262728

Сейчас на сайте