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

Форум PHP

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

 

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

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

тема: Отправка почты, кодировка
 
 автор: Boris   (07.12.2005 в 08:10)   письмо автору
 
 

Здравствуйте, вот кусок кода который отправляет почту (из Liteforum)
Никак не могу добиться чтобы кодировка нормальная была!
Или в поле "От:" абракадабра,
или в теле сообщения :(
А так писма идут нормально!

<?
$theme 
trim($_POST['theme']);
  
$message trim($_POST['message']);
  
$message "От ".$_COOKIE['current_author']."\n".nl2br($message);
  
// Проверяем введённые данные на соответствие
  
if(empty($theme)) links($id_forum,
                          
$id_theme
                          
"Тема сообщения не введена");
  if(empty(
$message)) links($id_forum
                            
$id_theme
                            
"Сообщение не введено");
  
$query "SELECT * FROM authors 
            WHERE id_author = 
$id_author";
  
$ath mysql_query($query);
  if (
$ath)
  {
    
$author mysql_fetch_array($ath);
    if(
trim($author['email']) == "" || $author['email'] == "-")
    {
      
$namepage "<i>e-mail</i> отсутствует";  
      exit();
    }
    
$theme =  convert_cyr_string(stripslashes($theme),'w','k'); 
    
$message =  convert_cyr_string(stripslashes($message),'w','k'); 
    
//$header = "Content-Type: text/html; charset=KOI8-R\r\n";
    //  $header = "Content-Type: text/html; charset=windows-1251\r\n\r\n";
    
$header .= "Content-Type: text/plain; charset=windows-1251\r\n";
    if(!empty(
$_COOKIE['current_author']))
    {
      
$query "SELECT email FROM authors
                WHERE name = '"
.$_COOKIE['current_author']."'";
      
$ath mysql_query($query);
      if (!
$ath) exit("Ошибка");
      
$email mysql_result($ath,0);
      if(!empty(
$email)) $email "<$email>";
      
$header .= "From: ".$_COOKIE['current_author'].$email\r\n";
    }
    
//$header .= "\r\n";
    
$header .= "Content-Type: text/plain; charset=windows-1251\r\n";
    if(@
mail($author['email'], $theme$message$header))
    {
      echo 
"<HTML><HEAD>
            <META HTTP-EQUIV='Refresh' CONTENT='0; URL=read.php?id_forum=
$id_forum&id_theme=$id_theme&id_post=$id_post'>
            </HEAD></HTML>"
;
    }
    else 
links($id_forum$id_theme"К сожалению, письмо не было отправлено");  
  } else 
puterror("Ошибочный запрос к таблице авторов автору: $id_author");
?>

   
 
 автор: cheops   (07.12.2005 в 13:56)   письмо автору
 
   для: Boris   (07.12.2005 в 08:10)
 

Уберите строки
<?php
    $theme 
=  convert_cyr_string(stripslashes($theme),'w','k'); 
    
$message =  convert_cyr_string(stripslashes($message),'w','k');
?>

   
 
 автор: Boris   (07.12.2005 в 14:28)   письмо автору
 
   для: cheops   (07.12.2005 в 13:56)
 

Нет толку, комментирую

$message =  convert_cyr_string(stripslashes($message),'w','k'); 

тогда текст сообщения = КАСГКШНЕМпаывпаыф
Пусть уж имя будет "плохим", но текст по-русски!

А код mail.php у меня такой:

<?php
  
///////////////////////////////////////////////////
  // Web-приложение форум - LiteForum
  // Поддержка http://www.softtime.ru/forum/
  // 2003-2004 (C) IT-студия SoftTime (http://www.softtime.ru)
  // Симдянов И.В. (simdyanov@softtime.ru)
  // Голышев С.В. (softtime@softtime.ru)
  // Кузнецов М.В. (kuznetsov@softtime.ru)
  ///////////////////////////////////////////////////
  // 20.12.2004 Симдянов И.В. (simdyanov@softtime.ru) - исправление
  //            проблем с кодировками в почтовом уведомлении
  ///////////////////////////////////////////////////
  // Выставляем уровень обработки ошибок (http://www.softtime.ru/info/articlephp.php?id_article=23)
  
Error_Reporting(E_ALL & ~E_NOTICE); 
  
// Устанавливаем соединение с базой данных
  
require_once("../admin/config_forum.php");
  
// Подключаем библиотеку форума
  
require_once("./utils/utils.php");
  
// Выводим шапку страницы
  
require_once("./utils/topnull.php");
  
// Извлекаем значения переменных 
  
$id_forum $_POST['id_forum'];
  
$id_theme $_POST['id_theme'];
  
$id_post $_POST['id_post'];
  
$id_author $_POST['id_author'];
  if(!
preg_match("|^[\d]+$|",$id_post) && !empty($id_post)) exit();
  if(!
preg_match("|^[\d]+$|",$id_theme) && !empty($id_theme)) exit();
  if(!
preg_match("|^[\d]+$|",$id_forum) && !empty($id_forum)) exit();
  if(!
preg_match("|^[\d]+$|",$id_author) && !empty($id_author)) exit();
  
$theme trim($_POST['theme']);
  
$message trim($_POST['message']);
  
$message "От ".$_COOKIE['current_author']."\n".nl2br($message);
  
// Проверяем введённые данные на соответствие
  
if(empty($theme)) links($id_forum,
                          
$id_theme
                          
"Тема сообщения не введена");
  if(empty(
$message)) links($id_forum
                            
$id_theme
                            
"Сообщение не введено");
  
$query "SELECT * FROM authors 
            WHERE id_author = 
$id_author";
  
$ath mysql_query($query);
  if (
$ath)
  {
    
$author mysql_fetch_array($ath);
    if(
trim($author['email']) == "" || $author['email'] == "-")
    {
      
$namepage "<i>e-mail</i> отсутствует";  
      exit();
    }
    
$theme =  convert_cyr_string(stripslashes($theme),'w','k'); 
    
$message =  convert_cyr_string(stripslashes($message),'w','k'); 
    
$header "Content-Type: text/html; charset=KOI8-R\r\n";
    
//  $header = "Content-Type: text/html; charset=windows-1251\r\n\r\n";
    //$header .= "Content-Type: text/plain; charset=windows-1251\r\n";
    
if(!empty($_COOKIE['current_author']))
    {
      
$query "SELECT email FROM authors
                WHERE name = '"
.$_COOKIE['current_author']."'";
      
$ath mysql_query($query);
      if (!
$ath) exit("Ошибка");
      
$email mysql_result($ath,0);
      if(!empty(
$email)) $email "<$email>";
      
$header .= "From: ".$_COOKIE['current_author'].$email\r\n";
    }
    
$header .= "\r\n";
    
//$header .= "Content-Type: text/plain; charset=windows-1251\r\n";
    
if(@mail($author['email'], $theme$message$header))
    {
      echo 
"<HTML><HEAD>
            <META HTTP-EQUIV='Refresh' CONTENT='0; URL=read.php?id_forum=
$id_forum&id_theme=$id_theme&id_post=$id_post'>
            </HEAD></HTML>"
;
    }
    else 
links($id_forum$id_theme"К сожалению, письмо не было отправлено");  
  } else 
puterror("Ошибочный запрос к таблице авторов автору: $id_author");
?>

   
 
 автор: Artemy   (07.12.2005 в 15:09)   письмо автору
 
   для: Boris   (07.12.2005 в 14:28)
 

Сначала закомментируйте строку
<?PHP
  $header 
"Content-Type: text/html; charset=KOI8-R\r\n"
?>

если не поможет, то измените ее на
<?PHP
  $header 
"Content-Type: text/html; charset=win-1251\r\n"
?>

Каким почтовым клиентом пользуетесь?

   
 
 автор: denvor   (13.12.2005 в 19:13)   письмо автору
 
   для: Artemy   (07.12.2005 в 15:09)
 

И from и subj корректно отображается в любом клиенте, если прописан как:

Subject: =?koi8-r?B?8M/E1Ncu?=

Понятно, что =?koi8-r? задает кодировку данного поля (может быть и win-1251 и тп), ?= - похоже, закрывает поле. А вот что внутри, чем закодировано, я пока не разобрался. Если разберусь - отпишу.

   
 
 автор: cheops   (13.12.2005 в 22:03)   письмо автору
 
   для: denvor   (13.12.2005 в 19:13)
 

А хоть один почтовый агент эти поля нормально отображает? Вообще не доллжно быть так...

   
 
 автор: denvor   (14.12.2005 в 09:28)   письмо автору
 
   для: cheops   (13.12.2005 в 22:03)
 

И аутлук и theBat. Вот кусок исходного соосщения, формируемого аутлуком:

From: =?koi8-r?B?5cbJzcXOy88g6S7rLg==?= <fbvcodznbbfs@gph.com>
To: <info@ooo.ru>
Subject: =?koi8-r?B?9dPM1cfJINDPINDSz8XL1MnSz9fBzsnALCD Tz9rEwc7JwCDJINfFxMXOycAg08HK1MEg98 Hbxcog?=
    =?koi8-r?B?y8/N0MHOyckuINXYzg==?=
Date: Wed, 14 Dec 2005 04:51:10 +0400
Reply-To: fbvcodznbbfs@gph.com
Mime-Version: 1.0
Content-Type: multipart/related;
    boundary="----=_NextPart_000_0064_01JXQ151.59ZP3R57"
X-Mailer: Microsoft Outlook Express 6.00.2600.0000
X-Priority: 1
X-MSMail-Priority: High
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
Message-Id: <20051214015250.29870A9B2@bird.zenon.net>

This is a multi-part message in MIME format.

------=_NextPart_000_0064_01JXQ151.59ZP3R57
Content-Type: text/html;
    charset=koi8-r
Content-Transfer-Encoding: 8bit

<html> 
<head> 
</head> 
<body> 
<table width="91%" align="center" cellpadding="0" cellspacing="0" style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:13px; "> 
 <tr> 
 <td><p>&#228;&#207;&#194;&#210;&#217;&#202; &#196;&#197;&#206;&#216;. <br> 


Основной текст сообщения, как и положено - в кои-8, а вот и From и Subject - обратите внимание!- непонятно как закодированы.
А вот кусок сообщения, созданного the Bat:

Subject: =?Windows-1251?B?z/Du4uXw6uA=?=
MIME-Version: 1.0
Content-Type: text/plain; charset=Windows-1251
Content-Transfer-Encoding: 8bit
X-Spam-Checker-Version: SpamCheck 3.0.1 (2004-10-22) on mx2.centre.ru
X-Spam-Status: No, hits=-1.2 required=5.0

Здравствуйте, .

Обратите внимание на Subject -то же самое. Какие будут предположения? Или кто-нибудь знает, как формируются такие поля?

   
 
 автор: cheops   (14.12.2005 в 14:00)   письмо автору
 
   для: denvor   (14.12.2005 в 09:28)
 

Хм... а может это Spam фильтр чего даёт... хостеры никак ситуацию не комментируют?

   
 
 автор: denvor   (14.12.2005 в 15:03)   письмо автору
 
   для: cheops   (14.12.2005 в 14:00)
 

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

   
 
 автор: cheops   (14.12.2005 в 23:43)   письмо автору
 
   для: denvor   (14.12.2005 в 15:03)
 

Пошлите себе письмо с этого форума - заголовки такие же приходят?

   
Rambler's Top100
вверх

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