Forum Webscript.Ru
Программирование => Perl => Тема начата: Skif от 08 Сентября 2004, 15:18:41
-
Имеется такой самопальный скриптик, для разбора заголовков письма на почтовике:
sub mailbox_table {
print "";
print "";
print "Номер | ";
print "Отм. | ";
print "От | ";
print "Тема | ";
print "
";
for ($i=1; $i<= $pop->Count(); $i++) {
#print "
";
foreach($pop->Head($i)){
#while ($from){
/^(From):\\s+/i;
#}
($zag, $field) = split(":",$_);
if (($zag eq "From") or ($zag eq "from")) {
$from=$field;
}
}
foreach($pop->Head($i)){
#while ($from){
/^(Subject):\\s+/i;
#}
($zag, $field) = split(":",$_);
if (($zag eq "Subject") or ($zag eq "subject")) {
$subject=$field;
}
}
#print "$i From: $from Subject: $subject";
print "";
print "$i | ";
print "Отм. | ";
print "$from | ";
print "$subject | ";
print "
";
}
print "
";
}
Все нормально работает, но вот меня не устраивает один момент, вот пример заголовка письма на сервере:
To: "skif@yyy.kiev.ua"
From: Skif
Content-Type: multipart/mixed;
При разборе, который я указал выше у меня в переменную $from попадает только Skif, а отсутствует, если поле фром имеет вид:
From: skif@xxx.kiev.ua
то все номано - e-mail видно. В принципе, когда я только вывожу список писем, такой исход меня вполне устраивает, а вот когда начинаю выводить тело письма, с заголовками откуда, куда и т.д - нет, не катит.
Вопрос, как добиться того, что бы полностью вывелозначение поля From.
На сколько я понимаю, тут надо покрутить с операторами поиска по шаблону, но у меня тут явные проблемы - не получается, может кто подскажет чего.
-
используй модуль MIME::Head и не мучайся.
-
Почитал. Но там о создании заголовков, а о разборе ничего нет. Но попробовал:
for ($i=1; $i<= $pop->Count(); $i++) {
#print "
";
my $head = MIME::Head->read($_);
$from=$head->get(\'From\');
$subject=$head->get(\'Subject\');
#print "$i From: $from Subject: $subject";
print "";
print "$i | ";
print "Отм. | ";
print "$from | ";
print "$subject | ";
print "
";
}
Результат - заголовки совсем не выводяться... :(((
-
курить perldoc
#!/usr/bin/perl
use MIME::Head;
use strict;
my $head = MIME::Head->read(\\*DATA);
my $from=$head->get(\'From\');
my $subject=$head->get(\'To\');
print "From is: $from, To is: $subject\\n";
__DATA__
To: "skif@yyy.kiev.ua"
From: Skif
Content-Type: multipart/mixed;
-
Незнаю, как не пробую все равно:
for ($i=1; $i<= $pop->Count(); $i++) {
my $head = MIME::Head->read($pop->Head($i));
my $from=$head->get(\'From\');
my $subject=$head->get(\'Subject\');
print "$i From: $from Subject: $subject";
#print $head;
#print $pop->Head($i);
}
Выдает:
1 From: Subject:
for ($i=1; $i<= $pop->Count(); $i++) {
my $head = MIME::Head->read($pop->Head($i));
my $from=$head->get(\'From\');
my $subject=$head->get(\'Subject\');
#print "$i From: $from Subject: $subject";
#print $head;
print $pop->Head($i);
}
А вот что передается в $head:
Return-Path: X-Original-To: skif@xxx.kiev.uaDelivered-To: skif@xxx.kiev.uaReceived: from localhost (localhost.owe [127.0.0.1]) by server.owe (Postfix) with ESMTP id 6CB1433D6A for ; Wed, 8 Sep 2004 16:22:11 +0000 (GMT)Received: from server.owe (freebsd2.owe [192.168.10.114]) by server.owe (Postfix) with ESMTP id 5855A33C9A for ; Wed, 8 Sep 2004 16:22:00 +0000 (GMT)To: "skif@xxx.kiev.ua" Subject: testing mail systemFrom: Skif Organization: he-he :)))Content-Type: text/plain; format=flowed; charset=koi8-rMIME-Version: 1.0Content-Transfer-Encoding: 8bitDate: Wed, 08 Sep 2004 16:21:59 -0000Message-ID: User-Agent: Opera7.23/FreeBSD M2 build 518X-Virus-Scanned: by amavisd-new at xxx.kiev.ua