Как стать автором
Обновить

Комментарии 52

А ещё есть Test Mail Server Tool — бесплатный эмулятор SMTP-сервера для Windows. Висит в трее, всю пришедшую почту складывает в папку на рабочем столе (по умолчанию, настраивается). Делов-то — в php.ini прописать:
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25

и перезапустить web-сервер. И все вышеуказанные пляски не нужны.

Источник: кросспост из моего мозга.

PS: Вы сеошник или случайно болдами выделили ключевые слова?
Кроме того, из документации:
Замечание: The Windows implementation of mail() differs in many ways from the Unix implementation. First, it doesn't use a local binary for composing messages but only operates on direct sockets which means a MTA is needed listening on a network socket (which can either on the localhost or a remote machine).
Так что неясно, откуда вы взяли утверждение о необходимости sendmail.
Прошу прощения, неточно выразился. Необходимости конечно нет. Просто sendmail это один из вариантов решения проблемы.
Тоже вариант. Только он почту не отправляет. Хотя, я согласен, что для тестирования такая заглушка подходит больше (все-таки на отправку почты может уйти довольно много времени).

По-поводу жирного шрифта. Наверное многие блоггеры в какой-то степени сеошники. Но в данном случае я старался выделять основные операции, а не ключевые слова. ИМХО текст без выделений читать значительно тяжелее.
Зачем нужен целый эмулятор сервера, висящий в трее?
mail() вызывает указанную в php.ini программу и отправляет ей во входной поток текст письма с заголовками.
Можно элементарно сделать свою программу. Даже просто php-скрипт, который скидывает в файл php://stdin и в php.ini прописать "php C:\...\mymail.php"
см. мое следующее сообщение :)
Можно, но когда только начинаешь заниматься программированием иногда сложно просто запустить готовый скрипт, а не то что написать программу.
P.S. Из собственного опыта :-)
Я вам помогу :)
file_put_contents('mailfolder/'.date('dmYHis').'eml', file_get_contents('php://stdin'))
Как-то так :)
А вам постоянно нужна отправка писем? К тому же, Test Mail Server Tool занимает в памяти всего два мегабайта, а для тестирования отправки его вполне достаточно.
В Windows далеко не всегда нужна реальная отправка писем, часто достаточно просто детализированного лога.
Потому пару лет назад написал для себя тестовый sendmail который вместо отправки сообщений, пишет все в лог:
[25.11.2006 15:58:19] /progra~1/sendmail/sendmail -t -i
To: admin@drupal
Subject: Drupal user account details for admin<code>
исходник и готовый exe-шник можно взять <a href="http://fork.org.ua/share/sendmail-test-win32/">тут</a>
установка: распаковать, настройка: добавить в php.ini
<code>[mail function]
sendmail_path = "C:\....\sendmail\sendmail.exe -t"</code>
Немного не досмотрел с оформлением, повторюсь:
исходник и готовый exe-шник можно взять тут
установка: распаковать, настройка: добавить в php.ini
[mail function]
sendmail_path = "C:\....\sendmail\sendmail.exe -t"
кстати, есть хороший SMTP-сервер "Spectral Personal SMTP Server" (http://spsmtp.org/)
НЛО прилетело и опубликовало эту надпись здесь
>>С точки зрения php программиста отправка почты выполняется с помощью стандартной функции mail().
Прелестно конечно, но за всех говорить не надо (:

Давно под виндой, исключительно для тестирования, я брал заглушку sendmail с денвера, проблем меньше и письма складывает в нужную папочку.
Аналогично, просто и удобно.
Прошу прощения если кого-то обидел, но я не имел в виду, что программисты не знают (или не должны знать) о том как реально отправляется почта.
Просто, на мой взгляд, установка sendmail, почтового и web серверов это вопросы администрирования, а не программирования.
Надо, надо... Рано или поздно возникнут траблы с почтой на хостинге, и чтобы заставить админов быстрее её починить, полезно будет знать, в каком месте всё стало плохо. Иногда, например, приходится ставить PEAR'овский пакет Mail и принудительно отправлять почту через SMTP.
а зачем ставить sendmail?
у меня прописано так:
[mail function]
; For Win32 only.
SMTP = сервер провайдера
smtp_port = 25
sendmail_from = мой почтовый ящик у провайдера

последнее не всегда обязательно
А авторизация? Или сервер локальный?
сервер моего интернет-провайдера
НЛО прилетело и опубликовало эту надпись здесь
Отправка выполняется где-то за полсекунды.
Если не нужно проверять как доходят письма, то, конечно, лучше использовать заглушку (работает быстрее).
а можно как вариант, залить на сервер скрипт, который принимает в параметрах: кому_отправить, тему и само письмо и с локального хоста curl'ом отправить =)
Каждый по-своему извращается)
я обычно пользуюсь функцией email() которая пытается отправить письмо через mail(), а в случае ошибки складывает это письмо в отдельную папку на диск
Вам большое человеческое спасибо за статью, давно не хватало этой опции на локольном сервере, особенно когда стоит wamp
а стандартный виндовый smtp из состава IIS религия не позволяет запускать?
Почему не позволяет? Я вообще локальный SMTP сервер не ставил.
Если нужно отправлять письма, то вам выбирать каким сервером пользоваться. Просто нужно правильно указать настройки в sendmail.
А сервер mail.ru я привел только как пример. Никаких особых преимуществ у него нет.
Статья для школьников.
Не для школьников, а для начинающих разработчиков. Я так и написал в начале статьи.
мда.
>>С точки зрения php программиста отправка почты выполняется с помощью стандартной функции mail().

а потом хостинговые сервера не вылазят из спам-листов. использование mail() выдает уровень программиста, что называется, "с головой".

SMTP-авторизация и удаленный почтовый серв. коннект на 25 порт, ehlo, auth plain..... а mail() у половины шаред-хостеров вообще выключен. "во избежание".
прАстите а рнр для windows зачем?
...кроме тестирования поделок
Следует отметить, что скрипт, пусть и тестовый, но уязвим для Mail Injection.
Согласен. Этот вариант исключительно для личного пользования на локальном компьютере. Просто хотелось максимально сократить скрипт.
Лучше бы ты его сократил за счет кривого форматирования.
Именно из-за таких "максимально сокращенных" пол-инета и сверкает дырами.
Тем, кто понимает, что к чему, твоя статья не нужна.
А те, кто ей будет пользоваться, сделают единственно доступное им действие - копипаст.

Если бы хотел сократить - вообще надо было форму убрать. Для иллюстрации достаточно отправки инфы на мыло админу.
Да, наверное, вы правы. Учтем :-)
до недавнего времени использовал отличный пакет XAMPP (http://www.apachefriends.org/en/xampp.html):
- Apache HTTPD 2.2.8 + Openssl 0.9.8g
- MySQL 5.0.51a
- PHP 5.2.5
- PHP 4.4.8
- phpMyAdmin 2.11.4
- FileZilla FTP Server 0.9.25
- Mercury Mail Transport System 4.52

Все отлично работает и настраивается.
Сейчас разработка пренесена на linux-платформу :)
ну и в денвере заглушка стоит на сендмэйл
Для ясности:
Вы сможете за 2 минуты настроить свой любимый почтовый клиент и спокойно получать всю почту, отправленную скриптами
Лучший способ послать почту: использовать сокеты
Плохой способ. А потом пользователи таких поделок удивляются, почему письма через грейлист не проходят.
Вы просто не умеете обращаться с SMTP-протоколом. За время пользования на куче хостингов и локально ни одного глюка, в отличие от mail(). Все прекрасно проходит, просто почитайте спецификацию.
Читал и не раз. Вы таки предлагаете реализовать на PHP полноценный MTA с почтовой очередью?
Вы о чем? При чем тут очередь? Я не собираюсь писать почтовый север на PHP, боже упаси :)
Просто отправлять через сокет удобнее и более функционально, если, конечно, вы осилили SMTP-протокол.
Если вы всего лишь предлагаете вручную реализовать работу с локальным MTA из скрипта, то так и напишите. Большинство проходящих мимо вашего комментария прочитают и подумают, что вот так и надо отправлять письма прямым коннектом на smtp.gmail.com, порт 25.
А в чем разница? =)
mail отправляет не через сокет, а с голубями?
Или добавляет волшебный заголовок "Дяденьки, не бейте меня, я не спам!!!"?
Через настроенный по умолчанию MTA. Готовый.
Война остроконечников с тупоконечниками.
Рекомендую замечательную статью на эту тему:

http://phpclub.ru/detail/article/mail

От себя отмечу что в пункте 5.2 я ставил себе не ArGoSoft Mail Server, с ним были проблемы и к тому же он кажется не бесплатный, а Courier Mail Server. С ним было всё просто и удобно.
А зачем имя аккаунта оформлять HTML-тегами: <а href='mailtо:accоunt_name@mail.ru'>account_name@mail.ru</а> и прочее?
Из-за этого была ошибка: To many arguments for user commandНаписал просто account_name@mail.ru, помогло
Похоже это работа хабрапарсера. Во всяком случае в режиме редактирования эти теги исчезают.
Вы совершенно правильно сделали, что удалили их.
Понятно :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории