Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почта уходит и не доходит
 
 автор: DJ Paltus   (10.08.2012 в 14:52)   письмо автору
 
 

Здравствуйте.
На новом хостинге (reg.ru) столкнулся с тем, что старый проверенный скрипт отправки почты не работает.
функция mail() возвращает true, но письмо никуда не уходит совсем.
ИЧСХ, другой сайт на год назад зарегистрированном там же хостинге шлет письма без проблем и за секунду.
<?
@$addr $_POST['addr'];
@
$mtext $_POST['text'];
$headers =  "Content-Type: text/plain; charset=utf-8\r\n".
               
"From: Корунд-софт <info@korund-s.ru>\r\n" .
               
"Reply-To: info@korund-s.ru\r\n".
               
"MIME-Version: 1.0";
@
$subject "=?utf-8?b?".base64_encode($_POST['theme'])."?=";

if (isset(
$addr) && $addr != "") {
    if (
mail($addr$subject$mtext$headers)) {
        echo 
"<h3>Сообщение отправлено</h3>";
    }
    else {
        echo 
"<h3>При отправке сообщения возникла ошибка</h3>";
    }
}

upd
Ша. Почта доходит везде, но mail.ru ее отшибает как спам. Даже в "спам" не кладет.\
На яндексовскую почту приходит с нормальным заголовком, но когда сообщение открываешь, тема письма разваливается в крокозябры. Может, я неправильно заголовок прописываю?

upd2
Мэйлрушники за полчаса всё исправили. В отлупе, который полетел назад, были всякие малопонятные слова и ссылка на "этонеспам". Помогло.
Однако, вопрос с вылетающей кодировкой темы письма остается открытым.

  Ответить  
 
 автор: confirm   (10.08.2012 в 19:39)   письмо автору
 
   для: DJ Paltus   (10.08.2012 в 14:52)
 

>Почта доходит везде, но mail.ru ее отшибает как спам

Ну собственно они правильно делают, вот вы $subject кодируете, а ведь не мешало бы делать это же самое и для From, если в нем типа такого: Корунд-софт <info@korund-s.ru>.

>функция mail() возвращает true, но письмо никуда не уходит совсем.

TRUE не означает, что почта даже ушла, не говоря о том, что ее кто-то принял. Это значение указывает лишь на то, что почта принята для отправки программой ее отправляющей, не более.

И вопрос - а зачем у вас кругом "собаки"?

  Ответить  
 
 автор: DJ Paltus   (11.08.2012 в 05:24)   письмо автору
 
   для: confirm   (10.08.2012 в 19:39)
 

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

Ну и с уходом почты мне тоже не совсем понятно. Я всегда считал вот этот метод отправки идеальным: все популярные серверы получали письма, отправленные таким образом, моментально (менее секунды даже с учетом обновления информации на странице почтовой службы).
А тут сбои пошли. Причем на выборочных хостингах.
Мейлрушники (см выше) меня пропустили в список доверенных, ну а где гарантия?

Действительно из-за неправильной кодировки?

  Ответить  
 
 автор: confirm   (11.08.2012 в 07:29)   письмо автору
 
   для: DJ Paltus   (11.08.2012 в 05:24)
 

Что значит для "быстроты восприятия"? Подавлять ошибки надо там, где они действительно возможны, а у вас что? Если это скрипт отправки почты (то что он у вас наскоро склепан, а не написан должным образом, это плохо), и к нему идет обращение, то вы должны проверять пусты или нет значения, а главное корректны ли они, а не спускать на них собак. Ну что это за подход такой к почте? А если я вам пришлю недопустимое для отправки, и что, вы отправите это?

Что касается кодировки почтового отправления, то заголовок "Content-type: text/plain; charset=charset", это заголовок указывающий кодировку тела почтового отправления, и никоим образом не указывает кодировку полей subject, from и прочих полей. Именно поэтому все, что у вас не английское нужно кодировать так, как это вы делаете для поля subject. В противном случае почтовый сервер примет абракадабру, которую вправе считать за спам, что mail и делает, да и почта входящая на майле проверяется Касперским.

Кроме этого нужно корректно разделять поля заголовков, вложений в отправлении и т.п., и учитывать то, что на разных платформах код перехода на следующую строку различен. Вы можете узнать средствами php какая у вас ОС и указывать в почтовом отправлении корректный разделитель. Вы обязаны проверять данные для отправки, вырезая "переводы-паразиты", и если не будете знать, что именно резать надо, то можете представить, что у вас будут содержать поля в таком случае.

Не знаю о каком надежном методе вы говорите. Если о функции mail(), то это просто функция, которая не отвечает за надежность, ответственность за нее, это ваша забота. Если вы о своем скрипте, то так как вы относитесь (по вашим же словам) к отправке почты, то о какой надежности можно говорить? Надежность обеспечивают рекомендации (хотите правила) описанные в соответствующих RFC документах, которые бы не мешало изучить. Вот тогда вы и будете отправлять надежные почтовые отправления.

  Ответить  
 
 автор: DJ Paltus   (11.08.2012 в 19:45)   письмо автору
 
   для: confirm   (11.08.2012 в 07:29)
 

По первому абзацу - это собаки. Они находятся в маленьком файлике с формочкой и скриптом отправки. Скрипт отправки - боевой, вынут из контекста сайта - для тестирования. Поэтому я не проверяю в нем значения. У меня даже формочки предзаполненные. И чего вы к ним цепляетесь? Ей-богу, проверку значений я умею делать! Уже получается проще было ее написать, чем отписываться от подозрений в некомпетентности на таком-то уровне.

Может, есть какой-нибудь готовый и признанный полезным фреймворк для отправки писем БЕЗ чтения RFC 2822?

А то документацию читать - да, полезно, когда есть время, мягкое кресло и никто не стоит над душой с криками о немедленной готовности продукта. Я же, как непрофессионал, предпочитаю полагаться на готовые решения, отчего иногда вынужден обращаться сюда за помощью.

За подсказку, тем не менее, спасибо! заменил строку в заголовке:
"From: =?utf-8?b?".base64_encode("Корунд-софт")."?=<info@korund-s.ru>\r\n"

С переносом строк пока что заморачиваться не хочу, будем решать проблемы по мере поступления.

  Ответить  
 
 автор: confirm   (11.08.2012 в 20:11)   письмо автору
 
   для: DJ Paltus   (11.08.2012 в 19:45)
 

Да не нужны в данном случае никакие собаки, они у вас бессмысленны.

>"Ей-богу, проверку значений я умею делать! ".

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

>"С переносом строк пока что заморачиваться не хочу, будем решать проблемы по мере поступления." И чего тогда вам сказать? )

Есть готовые решения, и грамотные. Есть готовые, грамотные, но богом забытые и на данный момент времени стали "дырявыми". Здесь тоже много выставляют готовых решений, а все и всегда ли они хороши? Вы хотя бы анализируете готовые решения прежде чем...?
Посмотрите код готового, например, phpmailer, и обратите внимание на то, как формируется почтовое отправление, и какое внимание уделяется проверке входных данных и отсечению "вредного". Может тогда вы поймете, что перевод строки, это не заморочка, это может вылиться или в небольшую неприятность, или проблему, это уже как сервера почтовые решат. Не в доверенные к ним проситься вы должны, а отправлять грамотную почту. Можете пользоваться и этим классом, хотя, насколько мне известно, в нем были обнаружены дыры, залатаны ли они сейчас, я не в курсе.

  Ответить  
 
 автор: DJ Paltus   (11.08.2012 в 20:58)   письмо автору
 
   для: confirm   (11.08.2012 в 20:11)
 

Да что за опять 25.
Говорю же, это здесь они не проверяются, потому что это вырванный их контекста блок. Если я в мастерскую принесу ремонтировать генератор, мне не скажут, что он не будет работать без всего остального автомобиля, ведь так?
Нету больше этого скрипта на сервере. На боевом - всё проверено как надо. Это - только набросок был, для краткости. И чтобы при загрузке он мне не рассказывал о пустом массиве ПОСТ, я и поставил двух собак.

phpmailer посмотрю, спасибо за наколку.

  Ответить  
 
 автор: confirm   (11.08.2012 в 21:03)   письмо автору
 
   для: DJ Paltus   (11.08.2012 в 20:58)
 

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования