Автор Тема: Разбор заголовков письма  (Прочитано 3567 раз)

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

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Разбор заголовков письма
« : 08 Сентября 2004, 15:18:41 »
Имеется такой самопальный скриптик, для разбора заголовков письма на почтовике:

sub mailbox_table 
{

print 
"<table width=590 bordercolor=95a4be border=1 cellspascing=0 cellpadding=0 align=center>";
print 
"<tr align=center bgcolor=\\"95a4be\\">";
print 
"<td><font color=white><b>Номер</b></font></td>";
print 
"<td><font color=white><b>Отм.</b></font></td>";
print 
"<td width=150><font color=white><b>От</b></font></td>";
print 
"<td width=390><font color=white><b>Тема</b></font></td>";
print 
"</tr>";



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 "
<tr align=center>";
	
print "
<td><font color=navy><b>$i</b></font></td>";
	
print "
<td><font color=navy><b>Отм.</b></font></td>";
	
print "
<td><font color=navy><b>$from</b></font></td>";
	
print "
<td><font color=navy><b>$subject</b></font></td>";
	
print "
</tr>";

}


print "
</table>";

}

Все нормально работает, но вот меня не устраивает один момент, вот  пример заголовка письма на сервере:

To: "skif@yyy.kiev.ua"
From: Skif
Content-Type: multipart/mixed;

При разборе, который я указал выше у меня в переменную $from попадает только Skif, а отсутствует, если поле фром имеет вид:

From: skif@xxx.kiev.ua

то все номано - e-mail видно. В принципе, когда  я только вывожу список писем, такой исход меня вполне устраивает, а вот когда начинаю выводить тело письма, с заголовками откуда, куда и т.д - нет, не катит.
Вопрос, как добиться того, что бы полностью вывелозначение поля From.
На сколько я понимаю, тут надо покрутить с операторами поиска по шаблону, но у меня тут явные проблемы - не получается, может кто подскажет чего.
Всё будет хорошо - я договорился!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Разбор заголовков письма
« Ответ #1 : 08 Сентября 2004, 15:21:37 »
используй модуль MIME::Head и не мучайся.
The documentations is your friend

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Разбор заголовков письма
« Ответ #2 : 08 Сентября 2004, 15:49:42 »
Почитал. Но там о создании заголовков, а о разборе ничего нет. Но попробовал:

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 "
<tr align=center>";
	
print "
<td><font color=navy><b>$i</b></font></td>";
	
print "
<td><font color=navy><b>Отм.</b></font></td>";
	
print "
<td><font color=navy><b>$from</b></font></td>";
	
print "
<td><font color=navy><b>$subject</b></font></td>";
	
print "
</tr>";

}


Результат - заголовки совсем не выводяться... :(((
Всё будет хорошо - я договорился!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Разбор заголовков письма
« Ответ #3 : 08 Сентября 2004, 16:09:07 »
курить 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" <skif@yyy.kiev.ua>
From: Skif <skif@xxx.kiev.ua>
Content-Type: multipart/mixed;
The documentations is your friend

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Разбор заголовков письма
« Ответ #4 : 08 Сентября 2004, 17:38:06 »
Незнаю, как не пробую все равно:

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
Всё будет хорошо - я договорился!

 

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