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

Форум Apache

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

 

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

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

тема: Поставил Дэнвер-3 - все классно, но с отправкой писем небольшой глюк.
 
 автор: tAleks   (26.01.2008 в 19:19)   письмо автору
 
 

Поставил Дэнвер-3 - все классно но с отправкой писем небольшой глюк.

Письма скриптами отправляют ся нормально. Но когда открываю их почтовой программой.
Такое письмо (исходный текст):

X-Sendmail-Cmdline: sendmail.pl -t -i
To: t@mail.ru
Subject: Тема
From: mail@mail.ru
X-Mailer: PHP/5.2.4
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="b724ef771d228bed226f1fb47a0130799"

--b724ef771d228bed226f1fb47a0130799
Content-Type: text/plain; charset="windows-1251"
Content-Transfer-Encoding: 8bit

Здравствуйте, Иван Иванович!


--b724ef771d228bed226f1fb47a0130799--


в почтовой программе выглядит так (сообщение):


Здравствуйте, Иван Иванович!

--b724ef771d228bed226f1fb47a0130799-

При этом заголовки Кому и Откуда не отображаются.

Ковырялся ковырялся. Открыл исходный файл письма редактором AkelPad, внизу, в статус строке вижу надпись Unix. Делаю "Правка" -> "Фотмат новой строки"->"DOS/Windows". Сохраняю. Потом открываю это письмо почтовой программой и все зашибись.

Значит дело в формате новой строки. Но в скрипте формат новой строки: "\r\n".
Все скрипты, который отправляют почту хорошо работают на Денвере-2 и на хостинге. Письма приходят в хорошо читаемом виде.

Где искать настройку этого глюка? Может кде в конфигурайционном файле че-нибудь надо подправить?

   
 
 автор: sim5   (27.01.2008 в 05:33)   письмо автору
 
   для: tAleks   (26.01.2008 в 19:19)
 

Я тоже поставил Денвер-3 - проблем с почтой нет. Вы скорее всего не верно формируете почтовое сообщение.

   
 
 автор: tAleks   (27.01.2008 в 18:40)   письмо автору
 
   для: sim5   (27.01.2008 в 05:33)
 

Ну я же привел пример почтового сообщения. Что в нем не верного?
И плюс ко всему, на Денвере-2 все работает классно. И на хостинге все работатет классно.

   
 
 автор: sim5   (27.01.2008 в 19:35)   письмо автору
 
   для: tAleks   (27.01.2008 в 18:40)
 

Что вы привели? Вы как почту отправляете и как формируете само отправление? В общих чертах:
Любая из частей письма может иметь Content-type: multipart, а значит сообщение представляет собой подобие древовидной структуры. Это гарантия, что каждая из частей письма займет правильное место. Пример структуры письма, имеющего текстовую и HTML версию (HTML с картинками), а так же вложенный документ PDF:

Content-type: multipart/mixed 
  Content-type: multipart/alternative 
     Content-type: text/plain 
     Content-type: multipart/related 
        Content-type: text/html 
        Content-type: image/jpeg 
        Content-type: image/jpeg
  Content-type: application/pdf

Одна из часто возникающих проблем при отправке почты - это формирование заголовка письма. Для отправки письма в кодировке win-1251, нужно перевести ее в понятный для почтовых клиентов koi8 заголовок, например (по-раздельно для наглядности)

<?php
//это отправитель
$sender "=?windows-1251?B?" base64_encode(quotesDel($name)) . "?= <" .$mail">";
//это тема
$subj "=?windows-1251?b?" base64_encode($subj) . "?=";
//а это уже заголовки 
$headers "From: ".$sender."\n";
$headers .= "Subject: ".$subj."\n";
..........

Пример - от участников форума имеющих русский ник, почта от форума приходит с заголовком в "крякозябриках".
Ну и другие моменты, которые можно узнать на http://www.php.net/manual/ru/. Я уже сказал, у меня тоже сейчас Денвер-3 и проблем не наблюдаю. Дело не Денвере-3.

   
 
 автор: tAleks   (27.01.2008 в 21:42)   письмо автору
 
   для: sim5   (27.01.2008 в 19:35)
 

>Что вы привели?

Я привел, если Вы не заметили, конкретный исходный текст письма, который был сгенерирован скриптом, текст взят из файла из папки денвера: C:\WebServers\tmp\!sendmail\2008-01-27_00-26-40.eml


X-Sendmail-Cmdline: sendmail.pl -t -i 
To: t@mail.ru 
Subject: Тема 
From: mail@mail.ru 
X-Mailer: PHP/5.2.4 
MIME-Version: 1.0 
Content-Type: multipart/mixed; boundary="b724ef771d228bed226f1fb47a0130799" 

--b724ef771d228bed226f1fb47a0130799 
Content-Type: text/plain; charset="windows-1251" 
Content-Transfer-Encoding: 8bit 

Здравствуйте, Иван Иванович! 


--b724ef771d228bed226f1fb47a0130799-- 


Что, конкретно в этом примере не правлиьного?


> Я уже сказал, у меня тоже сейчас Денвер-3 и проблем не наблюдаю. Дело не Денвере-3.

А в чем дело, если на денвере-2 этот же скрипт отправляет это же письмо, и оно читается нормально? - это рас.

У денвера есть тест почты, скрипт входящий в состав самого Денвера-3, Проверка отладочной заглушки для sendmail : http://localhost/Tests/sendmail/index.php
Через него отправлю тестовое письмо - проблема та-же.


ПРОБЛЕМА:
В почтовой программе заголовки Кому и Откуда, тема и др. не отображаются.

Открыл исходный файл письма редактором AkelPad, внизу, в статус строке вижу надпись Unix. Делаю "Правка" -> "Фотмат новой строки"->"DOS/Windows". Сохраняю. Потом открываю это письмо почтовой программой и все зашибись. Все заголовки нормально читаются.

Значит, делаю вывод, что дело в формате новой строки. Но в скрипте формат новой строки: "\r\n"
Все скрипты, который отправляют почту хорошо работают на Денвере-2 и на хостинге. Письма приходят в хорошо читаемом виде.


Возможно да, Вы правы что дело не в Денвере-3, а в настройках php.ini, или чего-ниудь другого. Может быть ваш денвер стоит на др. операционке. У меня на XP.

Кто может, помогите разобраться.

   
 
 автор: sim5   (28.01.2008 в 02:07)   письмо автору
 
   для: tAleks   (27.01.2008 в 21:42)
 

Нет. У меня не эксклюзив Денвера, а такой же как и у вас, скачанный от туда же от куда и вы его закачивали, и php.ini в нем уже настроен. Операционка таже - ХР. Я знаю про заглушку sendmail, а если говорить на уровне отчетов, то можно посмотреть здесь:
http://people.dsv.su.se/~jpalme/ietf/mhtml-test/mhtml.html.

   
 
 автор: Trianon   (28.01.2008 в 02:41)   письмо автору
 
   для: tAleks   (27.01.2008 в 21:42)
 

[много букв вырезал лично]

показывайте исходный код php.

Дело на 90% в терминаторах строки. Впрочем, Вы сами это уже выяснили.

   
 
 автор: tAleks   (28.01.2008 в 13:05)   письмо автору
 
   для: Trianon   (28.01.2008 в 02:41)
 

Сделал пример по проще.

Исходный код PHP:

<?php
mail
('test@mail.ru''Тема сообщения''Тело сообщения');
?>


В прицеке, скриншот сообщения при просмотре его программой The Bat.

   
 
 автор: tAleks   (28.01.2008 в 13:06)   письмо автору
 
   для: Trianon   (28.01.2008 в 02:41)
 

В этой прицепке, скриншот того же сообщения при открытии файла прогарммой AkelPad.

   
 
 автор: sim5   (28.01.2008 в 14:37)   письмо автору
 
   для: tAleks   (28.01.2008 в 13:06)
 

Ну и при чем тут Денвер? А вот как это выглядит в Outlook.

   
 
 автор: tAleks   (28.01.2008 в 15:02)   письмо автору
 
   для: sim5   (28.01.2008 в 14:37)
 

Денвер, тут возможно и не причем. Я денверу ничего не предъявляю. Я спрашиваю КАК ЭТО ИСПРАВИТЬ?

   
 
 автор: sim5   (28.01.2008 в 15:37)   письмо автору
 
   для: tAleks   (28.01.2008 в 15:02)
 

Оформлять почтовые отправления согласно стандарта:
http://ietf.org/rfc/rfc2045.txt
http://ru2.php.net/manual/ru/function.mail.php

   
 
 автор: tAleks   (28.01.2008 в 17:14)   письмо автору
 
   для: sim5   (28.01.2008 в 15:37)
 

Ну и где тут не стандарт?

<?php 
mail
('test@mail.ru''Тема сообщения''Тело сообщения'); 
?> 


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

Буду благодарен за помощь!

   
 
 автор: sim5   (28.01.2008 в 17:32)   письмо автору
 
   для: tAleks   (28.01.2008 в 17:14)
 

Стандарты - это верхняя ссылка, нижняя - это мануал по функции mail(), где есть и примеры, но если от меня, то: автор: sim5 (27.01.2008 в 19:35). Там по крайней мере показано как нужно передать тему письма и отправителя, например: Петя <as@as.as>
Дело в том, что вы должны указать в заголовке коодировку почтового сообщения, но она не будет действовать на From и Subject. Читайте, ньюансов много, простой пример из практики: с сайта N при отправке почтовых сообщений не было никаких проблем. Затем адресаты mail.ru иногда стали не получать письма, а затем и вовсе их перестали получать. Благодаря службе поддержки хоста выяснилось, что mail.ru не принимал эти письма, считая их за 100% спам. На вопрос mail.ru и предоставление им отправляемого содержимого (по их просьбе) - ответил молчанием. И наверное правильно сделали, просто тогда мне пришлось прочитать массу документов и прочей информации, коей в учебниках не всегда есть.
Читайте, поверьте - это будет для вас очень полезным.

   
 
 автор: tAleks   (28.01.2008 в 17:49)   письмо автору
 
   для: sim5   (28.01.2008 в 17:32)
 

Ув. sim5, причем тут все то что вы говорите, если проблема, как мы выяснили в терминаторах строк?
Проблема не в том, что тело сообщения формируется не правильно, а в том, что по каким-то неизвестным мне причинам, терминаторы строки с "\r\n" меняются на "\r". И это происходит точно не в скрипте:
<?php
mail('test@mail.ru', 'Тема сообщения', 'Тело сообщения');
?>

   
 
 автор: sim5   (28.01.2008 в 19:08)   письмо автору
 
   для: tAleks   (28.01.2008 в 17:49)
 

И этой проблемы у меня нет, да и пишу я с учетом Unix - \n.

PS. Специально попробовал \r\n ще раз, да есть огрех, но только с одной строкой происходит, а именно в теле письма отображается:)
Content-Transfer-Encoding: 8bitr\n

Надо вообще прогнать просто текст с переводом строк в Денвер-3, и если там подобного бага не будет, то у меня давно "руки чешутся" заменить sendmail заглушку, на взятую из Денвер-2. Не потому, что она имеет этот баг, а потому, что она в трее "сидит", и когда забываешь остановить сервер при выходе из системы, приходится читать напоминание о "Завершение программы...", достало уже это.)

   
 
 автор: tAleks   (28.01.2008 в 17:49)   письмо автору
 
   для: sim5   (28.01.2008 в 14:37)
 

А причем тут кодировка? Заголовки то в вашем Оутлуке есть! И текст сообщения есть!

   
 
 автор: tAleks   (29.01.2008 в 13:13)   письмо автору
 
   для: tAleks   (26.01.2008 в 19:19)
 

ВСЕ! Разобрался! Проблема была в Денвере-3!

Написал на форум Денвера, там помогли.

Проблема решается так:
замените в denwer\tools\sendmail\common.pm строки 58-59

print F "$x\n" if $x;
print F $mail;


на


print F "$x\r\n" if $x;
$mail =~s/(?<!\r)\n/\r\n/sg;
print F $mail;


Всем спасибо!

   
Rambler's Top100
вверх

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