Отправляет email-рассылки с помощью сервиса Sendsay

[TC] php. как установить нужную кодировку для писем

Здравствуйте, уважаемые!

Написал по учебнику скрипт отправки письма, но письмо приходит в непонятной
кодировке. Текст удается прочитать лишь выставив кодировку Кирилица
(Windows).

Начало Скрипта1:
$msg=

"From: Лист рассылки

To: Иванов Иван Иванович

Content-type: text/plain; charset=windows-1825

Это письмо послано почтовым роботом!";

Mail("myna***@s*****.ru","",$msg);

конец скрипта1

Затем в другом учебнике нашел такой способ:

Начало скрипта2:

$header="From: \"Aleksandr\" <myna***@s*****.ru>";
$header.="Content-type: text/plain; charset=\"windows-1251\"";
$subject="Моя тема";
$msg="
Здравствуйте!\n\n
С уважением, Вася!";
mail("myna***@s*****.ru", $subject, $msg, $header);
конец скрипта2

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

Подскажите, пожалуйста, почему скрипты не работают и как можно исправить
сложившуюся ситуацию?

Заранее всем благодарен,
Грызунов Александр. Самара.

Ответить   "eastreb" Tue, 14 Jul 2009 00:08:33 +0400 (#884701)

 

Ответы:

Vande omentaina, eastreb!

Я обычно никогда не ставлю кодировку в письмах, отправляемых функцией
mail().
Вот фрагмент рабочего кода (http://miranda.arthaelon.net). Вы
достаточно опытны, поэтому привожу без формы (инфа приходит из формы
от пользователя):

$from="Miranda IM <arthaelo***@ *****.ru>";
$to="Arthaelon Administration <inf***@ *****.net>";
Switch ($usubject) {
// Тут я меняю темы на более короткие, это неважно
}
$message="Здравствуйте!\n Пользователь ".$uname." (".$uemail.") пишет:\n".$uquestion;
if (mail($to, $subject, $message, 'From:'.$from)) {
// Тогда редиректить, иначе писать ошибку.

Будут вопросы, задавайте!

Ответить   Anarendil Tue, 14 Jul 2009 00:01:41 +0300 (#884757)

 

Приветствую всех.
Александр пишет:

Где же вы такие учебники находите?

Чтобы почтовая программа распознала набор символов, используемых в сообщении,
нужно в заголовок сообщения поместить поле:
Content-Type: text/plain; charset="windows-1251"

При этом желательно изучить формат сообщений электронный почты, тогда большинство
вопросов отпадут сами собой. Незатейливое описание формата на русском можно найти,
например, тут:
http://www.xserver.ru/computer/nets/internet/55/5.shtml

http://www.informika.ru/text/inftech/internet/webmast/labirint/email.html

http://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D1%87%D1%82%D0%B0

Будем считать, что вы, как минимум, прочитали какую-нибудь из указанных страниц.
Функция mail() в php принимает следующие параметры: адрес получателя, тема сообщения,
текст сообщения, заголовок сообщения и параметры командной строки для почтовой
программы. Два последних параметра являются необязательными.
Наибольшие трудности вызывает составление заголовка сообщения, потому что читать
спецификации и стандарты...короче, любят наши граждане до всего доходить своим
умом.
Возьмите второй скрипт и доработайте его: добавьте в каждую строку заголовка
символы \r\n, то есть:
$header = "From: myb***@m*****.my\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header.= "Content-Type: text/plain; charset=\"windows-1251\"\r\n";
$header.= "Content-Transfer-Encoding: 8bit\r\n";
и так далее для всех необходимых полей заголовка.

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

Успехов. Анатолий.

Ответить   "i_chay" Tue, 14 Jul 2009 13:43:11 +0500 (#884903)