/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
pop3 reader
Fra : cd


Dato : 19-06-06 11:53

Hej,

Jeg har lavet nedenstående program som kører uden fejl, men ikke leverer
noget output.
Jeg har en ide om at Email::Simple og Email::Abstract ikke rigtig forstår
den msg der
kommer retur fra $pop->get($msgnum) er der nogen der kan hjælpe mig med en
forklaring..

Jeg skylder nok lige at sige at jeg kun laver perl scripts til husbehov,
dette her bliver til et lidt større projekt
hvor jeg skal tømme en postkasse og automatisk behandle xml info fra de
enkelte emails.

Jeg bruger POP3 modulet til at læse mails fra en konto på en exchange
server, disse mails indeholder xml attachments som skal parses og gemmes i
en universe database.

#!/usr/bin/perl -w
#use strict;
use Net::POP3;
use Email::Simple;
use Email::Abstract;
use Email::MIME;
$pop = Net::POP3->new('aaa.bbb.ccc.ddd', Timeout => 60);
if ($pop->login('navn','password') > 0) {
my $msgnums = $pop->list;
foreach my $msgnum (keys %$msgnums) {
my $msg = $pop->get($msgnum);
my $message = Email::Simple->new($msg);
my $subject = $message->header("Subject");
my $body = $message->body;
#print "\n$msg\n";
print "\n$msgnum\n - $subject\n";
print "$body\n\n";
print $message->as_string;
print "\n";
}
}
$pop->quit;


mvh.

Claus D.



 
 
Peter Makholm (19-06-2006)
Kommentar
Fra : Peter Makholm


Dato : 19-06-06 12:01

"cd" <cd@fhyphenf.dk> writes:

> Hej,
>
> Jeg har lavet nedenstående program som kører uden fejl, men ikke leverer
> noget output.

I første omgang tjekker du om $pop->login('navn','password') går
godt. Dernæst tjekker du om (keys %$msgnums") returnere en liste med
nogle elementer i.

--
Peter Makholm | The four letter word beginning with L?
peter@makholm.net | It's life, love, libc or lisp
http://hacking.dk | -- Depending on you point of view

cd (19-06-2006)
Kommentar
Fra : cd


Dato : 19-06-06 15:43


"Peter Makholm" <peter@makholm.net> skrev i en meddelelse
news:87ac899zq3.fsf@xyzzy.adsl.dk...
> "cd" <cd@fhyphenf.dk> writes:
>
>> Hej,
>>
>> Jeg har lavet nedenstående program som kører uden fejl, men ikke leverer
>> noget output.
>
> I første omgang tjekker du om $pop->login('navn','password') går
> godt. Dernæst tjekker du om (keys %$msgnums") returnere en liste med
> nogle elementer i.
>

jeg ved ikke om det var dig eller nyhedsserveren der klippede min kode væk,
men et stykke nede i koden
har jeg udkommenteret en linie : print "\n$msg\n";

denne linie printer godt nok emailen ud, mit problem ser ud til at være at
Net::Simple ikke forstår den $msg som jeg henter med pop->get....

er der nogen der evt har et mindre eks. på at læse fra en pop3 boks og parse
de emails man læser ??

mvh.

cd



Peter Makholm (19-06-2006)
Kommentar
Fra : Peter Makholm


Dato : 19-06-06 16:47

"cd" <cd@fhyphenf.dk> writes:

>> I første omgang tjekker du om $pop->login('navn','password') går
>> godt. Dernæst tjekker du om (keys %$msgnums") returnere en liste med
>> nogle elementer i.
>>
>
> jeg ved ikke om det var dig eller nyhedsserveren der klippede min kode væk,
> men et stykke nede i koden
> har jeg udkommenteret en linie : print "\n$msg\n";

Det er mig, jeg klipper det væk jeg ikke svare direkte på. Men hvis
den kommer ned til den linje forstår jeg ikke at den tilsyneladende
ikke udfører linjen: print "\n$msgnum\n - $subject\n";

Hvis du får nogle beskeder bor du have et $msgnum og i det mindste bør
du få nogle tomme linjer og nogle linjer med en bindestreg på.

> denne linie printer godt nok emailen ud, mit problem ser ud til at være at
> Net::Simple ikke forstår den $msg som jeg henter med pop->get....

Email::Simple virker fint her på en testmail. Men hvis du læser
manualsiden under CAVEATS så kunne det godt se ud til at den er lidt
kræsen.

Hvordan ser din $msg ud? Hvis du får en fornuftig $msg så ser din kode
korrekt ud.

--
Peter Makholm | Sit back and watch the messages. This is actually
peter@makholm.net | more important than one might think as there is a
http://hacking.dk | bug in GNU Mach whereby hitting a key during the
| boot process causes the kernel to panic
| -- GNU Hurd Installation Guide

Peter Makholm (19-06-2006)
Kommentar
Fra : Peter Makholm


Dato : 19-06-06 17:10

"cd" <cd@fhyphenf.dk> writes:

> foreach my $msgnum (keys %$msgnums) {
> my $msg = $pop->get($msgnum);
> my $message = Email::Simple->new($msg);
> my $subject = $message->header("Subject");
> my $body = $message->body;
> #print "\n$msg\n";

Er du helt sikker på at denne linje skriver beskeden pænt ud. Når jeg
læser dokumentationen til Net::POP3 skriver den:

get ( MSGNUM [, FH ] )
Get the message "MSGNUM" from the remote mailbox. If "FH"
is not given then get returns a reference to an array which
contains the lines of text read from the server. If "FH" is
given then the lines returned from the server are printed
to the filehandle "FH".

Det vil altså sige at linjen bør skrive noget ud ala 'ARRAY(0x1800568)'

> print "\n$msgnum\n - $subject\n";
> print "$body\n\n";
> print $message->as_string;
> print "\n";
> }

Email::Simple forstår i hvert fald ikke at få mailen ind som en
arrayref, så du skal gøre noget ala:

$message = new Email::Simple join("",@$msg);

evt joine med "\n".

--
Peter Makholm | The four letter word beginning with L?
peter@makholm.net | It's life, love, libc or lisp
http://hacking.dk | -- Depending on you point of view

cd (28-06-2006)
Kommentar
Fra : cd


Dato : 28-06-06 14:35


>
> Email::Simple forstår i hvert fald ikke at få mailen ind som en
> arrayref, så du skal gøre noget ala:
>
> $message = new Email::Simple join("",@$msg);
>
> evt joine med "\n".
>
den sidste del hjalp, det er fordi det er en reference, men join gjorde
udslaget, jeg er i hvertfald kommet
videre med projektet, så tak for hjælpen

mvh.
Claus




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste