Отправка почты через sendmail в ОС Windows
Всем привет!
Наверняка многие использовали и используют функцию 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 можете взять тут
Удачи, пиши отзывы, кликайте на рекламу )))
Статья просмотренна 96518 раз, зашло посетителей 34839