Forum Webscript.Ru

Программирование => PHP => Тема начата: Alan от 28 Ноября 2001, 00:55:56

Название: Письмо
Отправлено: Alan от 28 Ноября 2001, 00:55:56
Вот простой пример:
файл mail.php
if (@mail($email, "Тема письма", $txt, "Подпись")) { echo "Сообщение отправлено без ошибок!"; } else { echo "Сообщение не было отправлено в связи с возникшей ошибкой! Попробуйте написать администратору по адресу $email"; }
?>
файл mail.html

- сюда надо
вводить e-mail, куда будем отправлять почту



- текст сообщения.





Простая отправка письма, но как мне сделать чтоб письма приходили в нормальной кодировке?
Название: Письмо
Отправлено: Britva от 28 Ноября 2001, 01:15:51
1. http://www.php.net/manual/en/function.mail.php
2. http://www.php.net/manual/en/function.convert-cyr-string.php
Название: Письмо
Отправлено: Alan от 28 Ноября 2001, 01:34:47
а можно на русском?
Название: Письмо
Отправлено: Britva от 28 Ноября 2001, 01:47:09
convert_cyr_string - преобразует в кодировку, к-рую тебе надо, из win в кои и т.д.
в mail\'e куча примеров!
если надо в кои-8 (т.к. стандарт) дополняй хеадер строкой
Content-Type: text/html; charset=koi8-r
Название: Не получается
Отправлено: Alan от 29 Ноября 2001, 23:39:27
Можете пример написать (полностью) а то что-то не получается :((
Название: делаю так и не получается
Отправлено: Alan от 30 Ноября 2001, 00:20:56


$extend_koi8r="\\nContent-Type: text/plain;
charset=\\"koi8-r\\"\\nContent-Transfer-Encoding: 8bit";
$email_txt=convert_cyr_string($txt,\'w\',\'k\');
$email_subject=convert_cyr_string(@$plain_subject,\'w\',\'k\');
$email_subject="Тема письма";
if(@mail("$email", "$email_subject", $txt, "From: Info
<адрес_отпрвителя>".$extend_koi8r))
{ echo "OK";}
else {echo "NO_OK";}

?>

Всё равно абракадабра приходит :(:(
Название: Письмо
Отправлено: Макс от 30 Ноября 2001, 00:36:18

  $HTMLmessage=convert_cyr_string($HTMLmessage,"w","k");
  $TEXTmessage=convert_cyr_string(strip_tags($HTMLmessage),"w","k");
  $boundary=md5(time())."\\@".strval(time());
  // формируем сообщение в формате MIME: будет состоять
  //       из двух частей - HTML-формат и текстовой формат.
  $body="--$boundary\\r\\nContent-type: text/html; charset=\\"koi-8r\\"\\r\\nContent-Transfer-Encoding: 8bit\\r\\n\\r\\n$HTMLmessage\\r\\n\\r\\n--$boundary\\r\\nContent-type: text/plain; charset=\\"koi-8r\\"\\r\\nContent-Transfer-Encoding: 8bit\\r\\n\\r\\n$HTMLmessage\\r\\n";
  //Составляем заголовок для письма
  $header="From: $from\\r\\nMime-Version: 1.0\\r\\nContent-Type: multipart/alternative;\\r\\n boundary=$boundary\\r\\n";
  mail($from,$subj,$body,$header);

Правда рекомендуется слать в qouted_printable. Для этого в примере 8bit нужно заменить на quoted_printable и вот эти строки так сделать:

$HTMLmessage=qp_enc(convert_cyr_string($HTMLmessage,"w","k"));
$TEXTmessage=qp_enc(convert_cyr_string(strip_tags($HTMLmessage),"w","k"));

qp_enc() функция для перевода строки в quoted-printable - взял из комментариев на  php.net

function qp_enc($input,$line_max = 76)
{
 $hex = array(\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'A\',\'B\',\'C\',\'D\',\'E\',\'F\');
 $lines = preg_split("/(?:\\r\\n|\\r|\\n)/", $input);
 $eol = "\\r\\n";
 $escape = "=";
 $output = "";

 while( list(, $line) = each($lines) )
 {
   $linlen = strlen($line);
   $newline = "";
   for($i = 0; $i < $linlen; $i++)
   {
     $c = substr($line, $i, 1);
     $dec = ord($c);
     if ( ($dec == 32) && ($i == ($linlen - 1)) )
     {
  $c = "=20";
     }
   elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) )
   {
        $h2 = floor($dec/16); $h1 = floor($dec%16);
$c = $escape.$hex["$h2"].$hex["$h1"];
   }
   if ( (strlen($newline) + strlen($c)) >= $line_max )
   {
        $output .= $newline.$escape.$eol;
$newline = "";
   }
   $newline .= $c;
 } // end of for
 $output .= $newline.$eol;
 }
 return trim($output);
}


Вот вроде бы и все :)
Советую сходить на php.net почитать там про mail() - много поучительных примеров.
Название: Не получается
Отправлено: Alan от 30 Ноября 2001, 08:54:00
Я пока не сильно ваще рублю в пхп, но то что написал не получается. Привожу текст скрипта:
.....................................
$HTMLmessage=qp_enc(convert_cyr_string($HTMLmessage,"w","k"));
 $TEXTmessage=qp_enc(convert_cyr_string(strip_tags($HTMLmessage),"w","k"));
  $boundary=md5(time())."@".strval(time());
  // формируем сообщение в формате MIME: будет состоять
  //       из двух частей - HTML-формат и текстовой формат.
  $body="--$boundary\\r\\nContent-type: text/html; charset=\\"koi-8r\\"\\r\\nContent-Transfer-Encoding: 8bit\\r\\n\\r\\n$HTMLmessage\\r\\n\\r\\n--$boundary\\r\\nContent-type: text/plain; charset=\\"koi-8r\\"\\r\\nContent-Transfer-Encoding: 8bit\\r\\n\\r\\n$HTMLmessage\\r\\n";
  //Составляем заголовок для письма
  $header="From: $from\\r\\nMime-Version: 1.0\\r\\nContent-Type: multipart/alternative;\\r\\n boundary=$boundary\\r\\n";
$from="alan";
$subj="Привет";  
$$body=" Привет всем кому пишу";
mail("alan@alba.dp.ua",$from,$subj,$body,$header);
?>
..............................
Приъходит вот что:*This message was transferred with a trial version of CommuniGate(tm) Pro*
--b401ac3f7c76716130670cfc4a69abd6@1007095722
Content-type: text/html; charset="koi-8r"
Content-Transfer-Encoding: 8bit



--b401ac3f7c76716130670cfc4a69abd6@1007095722
Content-type: text/plain; charset="koi-8r"
Content-Transfer-Encoding: 8bit




оПХБЕР
............................
Ели можно напишите целиком может я чтто-то не туда вставил :)