Автор Тема: Пересылка почты на Perl  (Прочитано 3588 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AZtpa

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.aztpa.ru
Пересылка почты на Perl
« : 14 Января 2005, 16:53:04 »
Добрый день.

Имеем код для пересылки сообщения:

use Mail::Mailer;
my $subject = "От меня";
my $body = "Тело сообщения";
$mailer->open
({
From => $from_address,                    
To  => $to_address,
Reply-to => $reply_to_address,
Subject => $subject
}) or die "Can\'t open: $!\\n";

print $mailer $body;

Подскажите пожалуйста каким образом переслать сообщение, используя кодировку отличную от принятой по умолчанию, например Windows-1251 вместо koi8-r.
Проблема в том, что по умолчанию на адрес получателя приходит текст в виде абракадабры:
Тема: яБХПХДНБ бКЮДХЯКЮБ
Cообщение: дНАПШИ ДЕМЭ

Заранее признателен,
AZtpa,

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
Пересылка почты на Perl
« Ответ #1 : 14 Января 2005, 17:04:17 »
Послал бы сам себе письмо нормальным образом (через почтовый клиент или веб-интерфейс почтовой службы) и своим скриптом, а потом поискал бы различия.
Ну да ладно:
1. Для указания кодировки тела письма в заголовок надо внести поле "Content-Type: text/plain; charset=\'windows-1251\'". Как это делать в Mail::Mailer, читай в его описалове.
2. Для использования кириллицы в заголовке письма и передачи её в правильной кодировке я делал так:
use MIME::Base64;
my $subject = "заголовок";
subject = "=?WINDOWS-1251?B?".substr(encode_base64($subject),0,-1)."?=";

Т.е. кодировал заголовок по base64, вырезал последний символ конца строки и добавлял в передаваемый заголовок название кодировки и тип кодирования.

Оффлайн AZtpa

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.aztpa.ru
Пересылка почты на Perl
« Ответ #2 : 19 Января 2005, 11:15:58 »
Еще раз по поводу отправки сообщения в нужной кодировке:
Все в высшей степени просто.
Смотри код:

my ($to_address, $reply_to_address, $from_address, $subject, $body) = (\'\',\'\',\'\',\'\',\'\');
my $message =  qq(To: $to_address
Reply-to: $reply_to_address
From: $from_address
Subject: $subject
Content-Type: text/plain; charset="Windows-1251"

$body);
my $mail_prog = \'path to your send mail\' ;
local *EMAIL;
open (EMAIL, "|$mail_prog -t") or die "Can\'t open senmail: $!";
print EMAIL $message;
close (EMAIL) or die "Can\'t close senmail: $!";

Отрабатывает нормально.

AZtpa,

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
Пересылка почты на Perl
« Ответ #3 : 19 Января 2005, 11:56:22 »
Цитировать
AZtpa:
Отрабатывает нормально

А если в сабжекте попробовать поотсылать кириллицу в различных кодировках?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28