Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка при отправке почты 
:(
    Опции темы
rcdimon
Дата 30.7.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: 1
Всего: 2



Всем привет.  Какие-то глюки с кодировкой при отправке письма

Код

my $top = MIME::Entity->build(
                                From    => '****',
                               To      => $mail,
                               Subject => $Subject,
                   Charset    => 'Windows-1251',
                               Data    => $TextMail,
                               Type        => "text/html"
);
    my $a = $top->stringify;
    my $smtp = Net::SMTP->new('mail.***.ru',
     Timeout => 30,
         Debug => 1); # Ваш сервер!
    $smtp->auth('***','****');
    $smtp->mail('****');
    $smtp->to($mail);
    $smtp->data();
    $smtp->datasend($top->stringify);
    $smtp->dataend();
    $smtp->quit;


Тема и текст письма по-русски в Windows-1251,
Однако на почту приходят крякозябли

Код

Çäðà âñòâóéòå!

ÀäìèГèñòðà öèÿ RSSonline.ru âûðà æà åò Âà ì ñâîå ïî÷òåГГЁГҐ ГЁ
áëà ãîäà ðèò Г§Г  ГЁГòåðåñ, ïðîÿâëåГГûé ГЄ Гà øåìó ïðîåêòó.

Ñïà ñèáî Âà ì Г§Г  ГІГ®, Г·ГІГ® ÿâëÿåòåñü ïîñòîÿГГûì ïîëüçîâà òåëåì RSSonline.ru
ГЌГ Г¬ î÷åГГј ГўГ Г¦ГГ® Âà øå Г¬ГГҐГГЁГҐ Г® ГГ ГёГҐГ¬ ïðîåêòå, âåäü ëþáîé
ïðîåêò ñîçäà åòñÿ äëÿ ñâîèõ ïîëüçîâà òåëåé.


Проверил что идет с выхода MIME::Entity, думал он делает что-то с кодировкой

Код

$top->stringify


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

Тогда я добавил одну опцию к MIME::Entity, чтобы он кодировал письмо в Base64

Код

Encoding => "base64"


И к получателю почта начала приходить нормально, по-русски... За исключением темы... Тема письма по прежнему приходила непойти как. MIME::Entity не кодировал ее... Тогда я попробовал закодировать ее вручную... И тогда до получателя тема стала доходить просто закодированной ) Однарно он ее не расшифровывал...

В итоге как не крути тема всегда приходит крякозяблями... Как быть?
PM MAIL ICQ   Вверх
nitr
Дата 30.7.2008, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



rcdimon
1) необходимо почитать RFC на эту тематику. Там сказано , как указать в какой кодировке тема (как пример, по поводу всевозможных заголовков). 
2) в какой кодировке скрипт?
3) Если ваш скрипт запускать в Windows, то всё ок.
Код
#!perl
use strict;
use warnings;

use MIME::Entity;
use Net::SMTP;

my $TextMail = 'Тестовое сообщение';
my $Subject = 'Тест по проверке кодировки';

my $top = MIME::Entity->build(
                                From    => '***@yandex.ru',
                                To      => '***@yandex.ru',
                                Subject => $Subject,
                                Charset => 'Windows-1251',
                                Data    => $TextMail,
                                Type    => "text/html"
);

my $smtp = Net::SMTP->new('smtp.yandex.ru', Timeout => 30,  Debug   => 1);

$smtp->auth('***', '***');
$smtp->mail('***@yandex.ru');
$smtp->to('***@yandex.ru');
$smtp->data();
$smtp->datasend($top->stringify);
$smtp->dataend();
$smtp->quit;


P.S.:
Или можно воспользоваться многими другими модулями, а не стандратным Net::SMTP.
Тем более что вы установили Mail-Tools+MIME-Tools smile , а эти модули как раз используются.

Добавлено через 58 секунд
По поводу манов, там сказано как "принудительно" указать в какой кодировке сообщение/тема.

Добавлено через 5 минут и 2 секунды
Цитата
Received: by mxback47.yandex.ru (Postfix, from userid 1)
    id ***; Thu, 30 Jul 2008 14:20:26 +0400 (MSD)
Received: from smtp14.yandex.ru (smtp14.yandex.ru [77.88.32.84])
    by mxback47.yandex.ru (Postfix) with ESMTP id ***
    for <***%[email protected]>; Thu, 30 Jul 2008 14:20:26 +0400 (MSD)
Received: from **** "EHLO
        localhost.localdomain" smtp-auth: "***" TLS-CIPHER: <none>
        TLS-PEER-CN1: <none>) by mail.yandex.ru with ESMTP id S***
        (ORCPT <rfc822;***%[email protected]>);
        Thu, 30 Jul 2008 14:20:18 +0400
X-Yandex-Spam: 1 
X-Yandex-Front: smtp14
X-Yandex-TimeMark: *
X-MsgDayCount: 1
X-Comment: RFC 2476 MSA function at smtp14.yandex.ru logged sender identity as: ***
Content-Type: text/html; charset="Windows-1251"
Content-Disposition: inline
Content-Transfer-Encoding: binary
MIME-Version: 1.0
X-Mailer: MIME-tools 5.427 (Entity 5.427)
From:   ***@yandex.ru
To:     ***@yandex.ru
Subject: Тест по проверке кодировки
Message-Id: <***@mail.yandex.ru>
Date:   Thu, 30 Jul 2008 14:20:18 +0400

Тестовое сообщение



--------------------
PM   Вверх
IceSunrise
Дата 4.8.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 7.4.2008
Где: Санкт-Петербург

Репутация: 3
Всего: 3



rcdimon, параметр Charset из MIME::Entity используется для определения кодировки тела письма. Заголовки письма кодируются иначе. Нужно почитать RFC, посмотрите MIME::Words. Я использую вот такую простенькую функцию:
Код

sub encode_mimeheader($$)
{
  my $string = shift;
  my $charset = shift;

  my $result = encode_base64($string);

  $result =~ s/^(.*)$/=?$charset?B?$1?=/mg;

  return $result;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0795 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.