Как действует mail()

dimant

Новичок
Как действует mail()

Расскажите механизм работы функции.Как она коннектиться с сервером,как отсылает письма.
 

TuBu

Guest
dmisizov

Есть мнение, что она вызывает стандартный пакет для отсылки почты (например sendmail или exim) под *nix

Под форточками скорее всего соединяется с указанным в настройках Mail сервером по SMTP протоколу.

Все вышесказанное глубокое ИМХО.
 

Макс

Старожил PHPClub
Как она коннектиться с сервером
для работы с почтовым сервером есть отдельный протокол - в данном случае это SMTP. Именно по нему он и работает (под виндой). В RFC по SMTP описано как посылать письма.
 

fixxxer

К.О.
Партнер клуба
TuBu
твое имхо правильное.
уточнение по п.1 - "например" определяется директивой sendmail_path в php.ini.
уточнение по п.2 - smtp-сервер определяется директивами SMTP и smtp_port в php.ini; авторизация не поддерживается вообще.
 

dimant

Новичок
А как нужно настроить всё,чтобы функция работала только если указан From:
И уже через этот фром коннетиться к серверу и отправлять письма.
 

fixxxer

К.О.
Партнер клуба
dmisizov
ты вообще понимаешь, как происходит отправка письма?
не в пхп. а вообще?
 

Miky

Guest
From: и To: это вообще декоративные элементы письма. Можно написать хоть "На деревню дедушке"
 

Demiurg

Guest
Miky
Вобще то это заголовки письма а заголовки декаративными быть не могут, потому как с ними обычно работают не люди а машины, а у машин чувства красоты еще не появилось.
 

_RVK_

Новичок
Demiurg
Miky хотел сказать что если в поле фром написанно [email protected] то это не значит что письмо оттуда.


dmisizov
Эта функция отправляет письма, а не принимает их. Соответственно ты сам указываешь в заголовке письма From:[email protected]. А если ты заголовок формируешь сам то в чем проблема? Что, куда и когда отсылать ты решаешь сам.
 

dimant

Новичок
Интересуюсь тк надо сделать ограничение на отправку писем.Чтобы mail() не использовалась для спама.И чтобы знать кто какое письмо отправил.Поэтому необходимо чтобы mail() отправляла письма только посредством существующих на моём сервере мэйл-адресов.
 

_RVK_

Новичок
dmisizov
Перечитай то что я тебе написал и попробуй понять. ТЫ отправляешь письма. И ТЫ можешь выбрать, отправлять письмо или нет.
Или ты админ сервера? Тогда вопрос не сюда. Это уже к настройке твоего MTA... Кстати не только с помощью mail можно отправлять письма.
 

dimant

Новичок
Задание мне даденое это установить ограничение писем отсылаемых с помощью mail() для одного почтового ящика.Именно почтового ящика потому что как ещё подсчитывать кто сколько писем отправил.Ну ограничение можно поставить на самом smtp-сервере.Но как сделать чтобы отправить можно было бы только с существующим на сервере и принадлежащим тебе ящиком.Или легче вобще вырубить нафик mail()?Чтоб никто и спама не отправлял.
 

fixxxer

К.О.
Партнер клуба
Единственное решение - пускать php от правильного юзера. CGI или патч апача.

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

(В сторону: и кто такого охламона под рутом то на сервер пустил?)
 

_RVK_

Новичок
dmisizov
Причем здесь PHP? Тебе же сказали что
1. поле From не обязательное, по нему ты ничего не отсеешь.
2. Все это делается настройкой системы, фильтров sendmail, procmail и т.д.
3. Спамер может не юзать mail().
 

dimant

Новичок
Картина более ли менее ясна.Осталось узнать как именно сделать так чтобы скрипты не запускались nobody а от их хозяина.Это модом апача делаеться?
 

fixxxer

К.О.
Партнер клуба
ClayRabbit
Не увидел ни одного нормального решения. :)
Подмена sendmail - не решение, sendmail используют не только php-скрипты; заменять в php.ini senmail_path - сделать popen("/usr/bin/sendmail ...") несложно, как и fsockopen("localhost",25). А запрещать все подряд - отпугивать кучу клиентов.
 

ClayRabbit

Guest
sendmail можно не подменять. просто в sendmail_path прописать путь к врапперу а не к сендмейлу. а при safe_mode и без подмены все хорошо.

popen() произвольного бинарника при php работающем от nobody? Если такое разрешать, о чем тут тогда вообще говорить...

fsockopen("localhost",25)? - а пуск пхп от юзера тут поможет? Это совсем в другом месте лечится.

А кто запрещает все подряд? А запрещать ничего и не надо. Просто не проблема сделать mail() "неанонимным" даже если php работает под nobody. Вот и все что я хотел сказать :)
 
Сверху