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: