Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > mutt + perl + koi8-r


Автор: noize 10.7.2010, 16:10
Добрый день. Настраиваю систему обработки почтовых сообщений. Сами сообщения падают на определённый почтовый ящик, откуда забираются с помощью fetchmail и обрабатываются в перловом скрипте, вот куски скрипта:
Код

#!/usr/bin/perl -w
use strict;
use MIME::Base64 qw( decode_base64 );
use Encode;
use utf8;
use open qw(:std :utf8);
use open IO  => ":encoding(koi8-r)";

my $gs = '/usr/bin/gs';
my $rm = '/bin/rm';
my $mv = '/bin/mv';
#Разбиваем письмо на заголовок и тело, сохраняем их в отдельных переменных
my (%head, @body);
my ($return,$subj,$number,$att_name,$filetype);
{
        local $/ = "";
        my $head = <STDIN>;
        $head =~ s/\n\s+/ /gs;
        my @head = split /\n/,$head;
        %head = map { my ($a,$b) = split (/:\s+/,$_,2); lc $a => $b } @head;
}
$/ = "";
while (<STDIN>) {
        $_ =~ s/\n\s+/ /gs;
        my @_body = split /\n/,$_;
        push(@body, @_body);
}
#Разбираем заголовок письма, выбраем адрес отправителя и тему письма
while (my ($key,$value) = each(%head)) {
        $return = $value if ($key =~ /^[rR]eturn-[pP]ath/);
        $subj = $value if ($key =~ /^[sS]ubject/);
}
$return =~ s/[<>]//g;
$subj = Encode::decode("MIME-Header","$subj");
.....
open (MAIL, "| /usr/local/bin/mutt $return -s \"FAXREPLY: $subj\" ") or die "can't open mutt: $!";
print MAIL "факс успешно отправлен\n\n________________\ndocname: $att_name\nresultcode: 0";
close MAIL;

Суть скрипта - выдёргивать из сообщения тему письма, имя аттача и MIME самого аттача. Далее MIME декодируется в исходный файл и этот файл отправялется по факсу. В конце абоненту отсылается ответ об успешной отправке факса. Настройки mutt:
Код

set realname="IP PBX"
set sendmail="/usr/bin/msmtp"
#set allow_8bit=yes
#set ascii_chars=yes
set charset="koi8-r"
set send_charset="koi8-r"
set from="<email>"

Проблема заключается в том, что письма с успешным статусом, отправленные из скрипта, абоненту приходят с кракозябрами в теме сообщения, хотя текст сообщения нормальный. Бьюсь уже второй день, подскажите, в какую сторону копнуть, заранее спасибо.
P. S. в качестве системной локали используется UTF8 

Автор: arto 10.7.2010, 17:52
а зачем вам мutt?

Автор: noize 10.7.2010, 20:03
хмм...странный вопрос. Ну наверное потому, что его легко настроить и использовать для отправки писем из консоли

Автор: arto 10.7.2010, 21:00
"Сами сообщения падают на определённый почтовый ящик, откуда забираются с помощью fetchmail и обрабатываются в перловом скрипте" -- мутта не усматриваю.
или он с другой стороны?

во всяком случае попробуйте MIME::Words

Автор: noize 10.7.2010, 23:27
Читаем внимательней. Сообщения забираются с помощью fetchmail и с этим проблем нет, и нет проблем с парсингом сообщения. Проблема возникает при отправке успешного статуса абоненту, в приведённом куске скрипта в самом низу.

P. S. подправил исходное сообщение, чтобы не возникало путаницы 

Автор: arto 10.7.2010, 23:46
тогда man mutt, и все вопросы разработчикам mutt.
если вам обязательно через mutt.

Автор: noize 11.7.2010, 00:02
Мне всё-равно через что, главное - чтоб работало. В данный момент ещё ковыряю exim 

Автор: arto 11.7.2010, 00:43
удачи. exim -- mta.
вам понадобятся еще rfc 2045, 2046, 2047, 2049

Автор: noize 11.7.2010, 17:04
Неактуально боле. Как всегда, проблема была в собственной невнимательности. Необходимо было в .muttrc выставить параметр set charset= в utf8 вместо koi8-r.
Спасибо за внимание.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)