Hej!
Har hämtat detta exempel från en lärobok.
Med denna kod så hämtar jag uppgifter om de meddelanden som finns på mitt POP-konto, och presenterar dom i en tabell. So far - so good.
Nu listar den upp rubriken, avsändaren och datumet för leveransen. Dessa uppgifter lagras i något som kallas för "TOP 2" och som hämtas från POP-servern.
Varje meddelande har sitt eget "TOP 2" med uppgifter som man kan hämta.
Nu till mitt problem:
Vill jag hämta uppgifter om e-postmeddelandet storlek, skall jag inte kika i "TOP 2" utan i något som heter "LIST", som följs av de nummer på det meddelande som jag vill hämta storleken ifrån.
Hur modifierar jag scriptet så att det även hämtar storleken från "LIST"?
Hur gör jag för att få fram själva meddelandet, som enligt boken, lagras i slutet av "TOP 2"?
Tack på förhand, med förhoppning på hjälp.
#!/usr/bin/perl
use Socket;
sub open_SOCKET;
$server = "min server";
$namn = "mitt användarnamn";
$losenord = "mitt lösenord";
open_SOCKET($server, 110);
select SOCKET; $| = 1;
<SOCKET>; # Läs hälsningen
print "USER $namn\n"; # Identifiera oss
<SOCKET>; # Läs svar
print "PASS $losenord\n"; # Ge lösenordet
<SOCKET>; # Läs svar
# Ta reda på antalet meddelanden
print "STAT\n";
$stat = <SOCKET>;
($antal) = $stat =~ /\+OK ([0-9]*)/;
print STDOUT <<_HUVUD_;
Content-Type: text/html
Pragma: no-cache
<TITLE>Brev på servern</TITLE>
<BODY BGCOLOR=white>
<CENTER><H1>Brev på servern</H1></CENTER>
Dessa är de brev som finns lagrade på servern för tillfället.<P>
<TABLE WIDTH=100%>
<TR><TH>Subject</TH> <TH>From</TH> <TH>Date</TH></TR>
_HUVUD_
# Loopa över alla meddelanden och skriv ut dem
for ($i = 1; $i<=$antal; $i++)
{
# Begär meddelandehuvudet
print "TOP $i 0\n";
# Läs statusraden
$status = <SOCKET>;
if ($status =~ /^\+OK/)
{
# Läs alla rader i meddelandet och leta reda på de
# intressanta rubrikerna
while ($rad = <SOCKET> )
{
# En punkt avslutar meddelandet.
last if $rad =~ /^\./;
if ($rad =~ /Subject: (.*)/)
{$subject = $1}
if ($rad =~ /From: (.*)/)
{$from = $1}
if ($rad =~ /Date: (.*)/)
{$date = $1}
}
# Skriv ut tabellposten
print STDOUT <<_POST_;
<TR><TD><FONT SIZE=-1><B>$subject</B></FONT></TD>
<TD><FONT SIZE=-1>$from</FONT></TD>
<TD><FONT SIZE=-2>$date</FONT></TD> </TR>
_POST_
}
}
# Säg adjö till servern
print "QUIT\n";
# Skriv ut dokumentfot
print STDOUT <<_FOT_;
</TABLE>
</BODY>
_FOT_
sub open_SOCKET
{
my ($server_namn, $port) = @_;
# Omvandla port till ett numeriskt värde om det inte redan
# är numeriskt.
$port = getservbyname($port, 'tcp') if $port !~ /^[0-9]/;
# Skapa en socket
socket SOCKET, AF_INET, SOCK_STREAM, 0;
# Öppna en koppling till klienten
connect(SOCKET, sockaddr_in($port, inet_aton($server_namn)));
}
[Redigerat av Brian den 09 nov 2001]