webForumDet fria alternativet

Hämta uppgift om storlek på epost

1 svar · 185 visningar · startad av Brian

BrianMedlem sedan sep. 2001502 inlägg
#1

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]

BrianMedlem sedan sep. 2001502 inlägg
#2

Löste problemet på egen hand :)

[Redigerat av Brian den 11 nov 2001]

126 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)