[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: получить текст письма в скрипте



On Thu, May 27, 2010 at 12:13:38PM +0400, Ed wrote:
> собрался поднять шлюз email2sms на smstools.
> 
> проблема в том, что письмо может быть сформировано по-разному:
> разный charset (для русскоязычных - koi8-r, utf8, ...), разный
> encoding (8bit, base64, ...), может multipart MIME попасться...
> 
> то есть нужен фильтр - на входе письмо, на выходе - текст из него в
> требуемой кодировке.
> есть что-либо стандартное? (или может быть на перле можно в
> несколько строк уложится?)

Ну да. libmime-tools-perl

use MIME::Tools;
use MIME::Parser;
use MIME::Head;

### Create parser, and set some parsing options:
my $parser = new MIME::Parser;
$parser->output_under("");
my $entity = $parser->parse(\*STDIN) or die "parse failed\n";
#$entity->dump_skeleton;
my ($num_parts,$ent);
my $head=$entity->head();
.....= decode_word($head->get('Subject'));
if($num_parts = $entity -> parts()){
    if( $head->mime_type eq 'multipart/alternative'){
        for my $i (1..$num_parts){
            my $e=$entity->parts($i-1);
            if($e->head()->mime_attr('content-type') eq 'text/plain'){
                $ent=$e;
                last;
            }
        }
    }elsif( $head->mime_type eq 'multipart/mixed'){
my $body=$ent->bodyhandle();
my $charset = $ent->head()->mime_attr('content-type.charset');
### Read the (unencoded) body data:
if (my $io = $ent->open("r")) {
    while (defined($_ = $io->getline)) {



Reply to: