Эта тема на forum.dklab.ru


Eric-S: как заставить php отправлять email из под windows
Я знаю, что такое можно сделать. Потому, что у меня реально это работало.
Но вот сейчас windows xp prof sp2 ну не хочет отправлять почту.
Если честно, то я не помню, с какой винды я отправлял, может быть win2k.

Подскажите, в каком направлении рыть.
Настройка php или smtp сервера?

Я точно пользовался функцией mail, но может быть через сокеты будет корректнее?
dimagolov:
можно слать по smtp, классы для работы с smtp в сети есть. если сервер не имеет своего MTA, то ничего другого не выдумаешь. заводить же живой (то есть работающий не только на localhost) MTA имеет смысл если у Вас свой домен и есть статический IP. тогда можно настроить почтовый домен, который сможет посылать и отправлять почту кому угодно. до тех пор можно извращаться через SMTP провайдера, но тогда уж проще на тот же SMTP провайдера обращаться прямо из php
Eric-S:
А можно поподробнее.

У меня есть свой сервер, фиксированный ip, хотя есть и smtp провайдера.

Кстати, что имеется в виду, под прямой работой с smtp провайдера?
Eric-S:
Это всё конечно интересно, в плане копания с системой. Не знаю, может быть я в конфигурации сервака уже что-то накрутил.
Если честно, то с mta неочень-то знаком. Может быть немного больше обычного пользователя.

Вот сейчас почитал
http://ru.wikipedia.org/wiki/Mail_Transfer_Agent

И чо? Скрипт мой всё равно реальную почту не отправляет.
Хотя в денвере, всё сложил аккуратненько.
Можно ли судить, по результатам отработки заглушки sendmail в денвере, что я правильно отправляю почту?

Был у меня домен на jino-net, но хостинг не работает. вот там скрипт нормально отправлял почту. А тут, мой сервак, и не отправляет!
Миша Спларов:
Не знаю, как обстоят дела в Денвере, но вообще в PHP: http://ru2.php.net/manual/en/mail.configuration.php
Кроме этого есть классы для отправки почты через SMTP, например Zend_Mail умеет.
Из SMTP-серверов под Windows есть например Kerio Mail Server, но я сомневаюсь, что вам оно нужно - не проще-ли пользоваться SMTP провайдера в вашем случае?
dimagolov:
вообще на винде вся эта красота немного неродная, да и не надежна она. если есть домен и статический IP, то имеет смысл завести тазик под *NIX, там какой нибудь линух или фряху. Линухи сейчас как десктопы очень даже ничего, да и Фри при определенном старании тоже.
Eric-S:
Как я понял из всех настроек обязательно нужно только вбить smtp провайдера в мой php ini?

И это должно работать, но у меня почему-то не работает.

Или для работы через провайдера нужно что-то ещё?
dimagolov:
Eric-S, когда Вы научитесь анализировать проблему и жаловаться на что-то кроме "не работает". Почему Вы так уверены в том, что тут собрались исключительно ассы телепатической отладки чужих скриптов?
Eric-S:
Простите!
На вашу телепатию даже и не расчитывал.
Скрипт классический из мануала.

mail("my@mail.ru", "test", "message is test");

На денвере всё нормально отработал.

А на сервере не желает.

smtp провайдера прописал в php.ini
Остальное стандартные (после установки php не менял)

Провайдер ничего эксклюзивного не требует, даже нет авторизации.

порты и разрешения в антивирусах в норме.

Вопрос простой:
мне дальше крутить винду искать в ней глюки,
или что-то делать с php.

Впрочем обо всём этом я уже писал выше.


Как я понял функция mail под windows напрямую работает с сокетами, а под линухом она обращаеться к sendmail.
Из чего следует, что заморачиваться с сокетами нет смысла.

Может быть для прохождения какой-нибудь проверки сейчас нужны дополнительные поля?

Предложение ставить linux конечно же интересно, но в данной ситуации не реально.

Предложение ставить свой smtp сервер... А есть какой-нибудь фрееварный?


Что я могу ещё сказать? Это же не вопрос типа:
"написал крутую библиотеку на php_10. В ней всего 1000000000 строк. А она почему-то неработает. Немедленно исправте ошибку, мне вчера нужно было здать.".
dimagolov:
повторюсь "можно слать по smtp, классы для работы с smtp в сети есть", потому что многие хостеры сидят глубоко и серьезно в black-list-ах и отправить с них почту может быть проблематично, еще проблематичнее добиться стабильности в этом вопросе.

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

п.с. на хостинге тоже винда???
Eric-S:
Я с темой знаком плохо. И не могу себе представить в чём проблема.
Поднял сервер apache вкрутил php и mysql.
На другой машине у меня отправлялось.
А на этой просто
result = bool(false)

Вот код для тестирования.


<html><head>
<title>test mail</title>

</head><body>

<form method="post">
e-mail: <input name="email" value="eric-s@mail.ru"><br>
subject: <input name="subject" value="test"><br>
ñîîáùåíèå:<br>
<textarea name="messages"></textarea>
<br>

<input type="submit">
</form>

<pre><?php
Error_Reporting(E_ALL);


if (isset($_POST['messages'])) {


printf ("address = %s\nsubject = %s\nmessages:\n%s\n",
$_POST['email'],
$_POST['subject'],
$_POST['messages']);


$result = mail(
$_POST['email'],
$_POST['subject'],
$_POST['messages']);

echo 'result = ';
var_dump ($result);


}
?></pre>
</body></html>


А где я могу посмотреть ошибки?
У меня кажеться и логов то нет.
Eric-S:
Чтоже касаеться специализированных классов.
Те которые я видел, мне непонравились.
То слишком мудрёные, то документация на нерусском.
В других же дыр больше. Даже с моим незнанием данного вопроса очевидных.

Да и зачем говорить о классах, если с машины сообщения не хотят улетать.

Посмотрел айпишник по базе 2ip.ru вроде чисто.
Eric-S:
Прошу снисхождения, к ничтожнейшему. Я уже и так понял, что достал вас всех до печёнок, раз моя карма ушла в минус.

Почему мой сервер нехочет отправлять сообщения не знаю, ну да и фиг с ним.

А вот почему возникли проблемы с провайдером выяснил. Сейчас пойду ругаться.
Они на форуме вывесили пост, а в faq, исправить не удосужились. Даже когда я позвонил в контору ничего толкового не сказали.
А дело в том, что с некоторых пор требуеться проверка пользователя (как на почтовый сервер).


Ну и соответственно вопрос.
С помощью функции mail и чистого php как эту проверку организовать?
Миша Спларов:
С помощью функции mail и чистого php как эту проверку организовать?
Никак.
Eric-S:
Тогда остаються только сокеты. Попробую разобраться.
Миша Спларов:
Eric-S
Я вам советую посмотреть в сторону Zend_Mail - очень удобно сделано на мой взгляд.
Eric-S:
Офигеть!
И описание на русском.
А то я на всякие phpmailer натыкаюсь, которые жутко страшные.

Но хочеться в проблеме и самому порыться . Иначе в чужих библиотеках не в зуб ногой.

Теперь мне например фраза об иньекции с помощью новой строки понятна, а ещё неделю назад и понятия об этом неимел.
Да и скодировками вроде разобрался.
dimagolov:
Зря Вы так про PHPMailer. Половина интернета его юзает и не жужит, я в том числе. Но если прикрутите Zend_Mail, то тоже нормально.
С инъекциями надо бороться принимая данные от пользователя и анализируя их. Но так как Вы в форме задаете TO, то никакой инъекции не нужно, бери и шли что угодно кому угодно :)
Eric-S:
Да я не жузжу. Просто у zent_mail выходит красивенько, код подключения. А у этого самого майлера наоборот страшненькое.

А с этими иньекциями и пр. Только погрузившись с головой в вопрос, можно узнать об их существовании и понимать, что к чему.

Ладно, всем спасибо. Я ещё ничего не сделал, да и решение немного откладываеться. Но направление узнал, буду двигаться к победе. Надеюсь, что всё получиться.
dimagolov:
А у этого самого майлера наоборот страшненькое.
да? что-то не замечал. Если метод Send возвращает FALSE, то в ErrorInfo строка ошибки, типа такого (у меня сервер свой, так что других не бывает):
recipients_failedbuyerman1@oneworld.name
connect_host
Eric-S:
ну может быть мне так показалось.
(это было ещё в самом начале моих капаний.)

А когда посмотрел, как подключаеться zent_mail, для меня всё было понятно. Возможно потому, что к тому времени я уже опыта поднабрался. Самое смешное, что у меня класс примерно также сообщение отправляет.

Эта тема на forum.dklab.ru