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

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Sockets, liste over mails?
Fra : Mads A. Jensen


Dato : 24-06-02 10:23

Hej

Jeg har lavet et lille script, som kan læse en mail på serveren.
Men nu ville jeg gerne have udvidet det en smule således at det kunne give
en liste over alle nye meddelser på server.

Mit problem er hvordan jeg gør, sådan at der ikke kommer en timeout (som der
gør, hvis man ikke smider en QUIT før output, dvs:
while(!feof($sock)){
// linier
}
)

Nogle, der kan hjælpe mig lidt på vej?
Mange tak på forhånd!

/Mads
--

--
Mads Jensen
http://ddfr.dk - Dansk Donaldist Forening
http://www.disney-comics.dk - Free Disney comics on the web!
info@disney-comics.dk



 
 
Jonas Koch Bentzen (24-06-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 24-06-02 10:58

Mads A. Jensen skrev:
>
> Jeg har lavet et lille script, som kan læse en mail på serveren.
> Men nu ville jeg gerne have udvidet det en smule således at det kunne give
> en liste over alle nye meddelser på server.
>
> Mit problem er hvordan jeg gør, sådan at der ikke kommer en timeout (som der
> gør, hvis man ikke smider en QUIT før output, dvs:
> while(!feof($sock)){
> // linier
> }
> )

Jeg er ikke helt med på, hvad det egentlig er, du forsøger at læse.
Læser du en brevkasse i maildir-formatet? Læser du fra en POP3-server?


Mads A. Jensen (24-06-2002)
Kommentar
Fra : Mads A. Jensen


Dato : 24-06-02 11:30

Hej

> Jeg er ikke helt med på, hvad det egentlig er, du forsøger at læse.
> Læser du en brevkasse i maildir-formatet? Læser du fra en POP3-server?

Jeg kender ikke til maildir formatet. Jeg har brugt RFC 1939 til det.

Her er koden til det:

<?php
$server = "mail.dht.dk";
$port = "110";
$user = "user";
$pass = "password";

$fp = fsockopen($server, $port);
fputs($fp, "USER $user\n");
fputs($fp, "PASS $pass\n");

fputs($fp, "STAT\n");
list($status, $msg) = explode(" ", fgets($fp,"1024"));

echo $msg;

fputs($fp, "RETR 1\n");
fputs($fp, "QUIT\n");
while(!feof($fp)){
echo str_replace("+OK", "", fgets($fp, "1024"))."<br \>\n";
}

fclose($fp);
?>

Det kan læse en mail, hvis der er en ny!

/Mads

--
Mads Jensen
http://ddfr.dk - Dansk Donaldist Forening
http://www.disney-comics.dk - Free Disney comics on the web!
info@disney-comics.dk



Jonas Koch Bentzen (24-06-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 24-06-02 11:46

Mads A. Jensen skrev:
>
> fputs($fp, "RETR 1\n");
> fputs($fp, "QUIT\n");
> while(!feof($fp)){

Hvorfor skriver du QUIT før du henter brevet?

Husk i øvrigt at fread'e en linje (f.eks. 4096 bytes) efter at du har
forbundet til serveren, efter at du har skrevet brugernavn, efter at du
har skrevet adgangskode, osv.

I stedet for while (!feof($fp)), så læs indtil du støder på brevet
slutning, som er markeret med et punktum efterfulgt at carriage return
og newline.

Prøv at bruge nogle af de mange POP-læsere på nettet som inspiration.
Morten Blinksbjerg Nielsen (http://mbn.dk/) lavede vist engang en, og
jeg har også selv lavet en, der kan findes på
http://instantwebmail.sourceforge.net/).

Noget helt andet er, at du næsten burde bruge IMAP-funktionerne (som
også understøtter POP) til formålet .Hvis din PHP ikke understøtter
IMAP, så brug f.eks. PEARs Net_POP3 (eksempel på
http://cvs.php.net/co.php/pear/Net_POP3/Net_POP3_example.php?r=1.1&Horde=13215c089ea18aba374f6e9a2ad6fa12)
eller evt. de lidt mere veldokumenterede og stabile
PEAR-socket-funktioner
(http://pear.php.net/manual/en/core.networking.net_socket.php):

<?php
# Utestet:
require_once("Net/Socket.php");

$server = "mail.dht.dk";
$port = "110";
$user = "user";
$pass = "password";

$socket = new Net_Socket();
$socket->connect($server, $port);
$socket->readLine();
$socket->writeLine("USER $user");
$socket->readLine();
$socket->writeLine("PASS $pass");
$socket->readLine();
$socket->writeLine("STAT");
list($status, $antalBreve) = explode(" ", $socket->readLine());
# osv.
?>


Mads A. Jensen (24-06-2002)
Kommentar
Fra : Mads A. Jensen


Dato : 24-06-02 14:28

Hej

> Prøv at bruge nogle af de mange POP-læsere på nettet som inspiration.
> Morten Blinksbjerg Nielsen (http://mbn.dk/) lavede vist engang en, og
> jeg har også selv lavet en, der kan findes på
> http://instantwebmail.sourceforge.net/).
Har jeg gjort, brugte din gamle feriepost, og den hjælp mig lidt til at
komme igang!
Men jeg får en fejl til sidst i scriptet,
Parse error: parse error, unexpected $ in
/hotel/disney-comics/WWW/junk/mailcheck.php on line 82
Kan ikke helt hitte ud af hvorfor den kommer, og hvordan jeg bearbejder den!
Har copy og pastet fra dit script!

<?php
// connect osv.

fputs($fp, "STAT\r\n");
$stat = fgets($fp,1024);
$mails = split(" ", $stat);
if($mails[1] == "0"){
echo "There are no new messages!";
}

else{
for($i = 1;$i >= $mails[1];$i--){
fputs($fp, "TOP $i 0\r\n");
while(substr($line = fgets($fp, 1024), 0, 2) != chr(13).chr(10)){
if (substr($linje, 0, 9) == "Subject: ") {
$emne = htmlspecialchars(substr($linje, 9));
}
if (substr($linje, 0, 6) == "From: ") {
$fra = htmlspecialchars(substr($linje, 6));
}
if (substr($linje, 0, 6) == "Date: ") {
$dato = htmlspecialchars(substr($linje, 6));
}
if (substr($linje, 0, 3) == "+OK") {
$stoerrelse = split(" ", $linje);
$stoerrelse = $stoerrelse[1];
if ($stoerrelse && $stoerrelse != "\r\n") {
$stoerrelse = $stoerrelse / 1024;
$stoerrelse = number_format($stoerrelse, 1);
$stoerrelse = str_replace(".", $s_decimalDelimiter, $stoerrelse);
$stoerrelse = "$stoerrelse $s_kb";
}
else {
$stoerrelse = "-";
}
}
}
}
fputs($fp, "QUIT");

fclose($fp);
?>

/Mads



Jonas Koch Bentzen (24-06-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 24-06-02 14:35

Mads A. Jensen skrev:
>
>>Prøv at bruge nogle af de mange POP-læsere på nettet som inspiration.
>>Morten Blinksbjerg Nielsen (http://mbn.dk/) lavede vist engang en, og
>>jeg har også selv lavet en, der kan findes på
>>http://instantwebmail.sourceforge.net/).
>
> Har jeg gjort, brugte din gamle feriepost

Måske ikke det bedste script at tage fra, eftersom jeg skrev det, da jeg
gik i børnehaveklassen : )

> Men jeg får en fejl til sidst i scriptet,
> Parse error: parse error, unexpected $ in
> /hotel/disney-comics/WWW/junk/mailcheck.php on line 82
> Kan ikke helt hitte ud af hvorfor den kommer

Det kan jeg heller ikke, må jeg indrømme. Prøv i stedet med det
sockets-eksempel, jeg kom med før. Husk at hente en linje hver eneste
gang, du affyrer en kommando. Du skal også hente en linje lige efter at
du har forbundet til serveren, for dér kommer serveren med en
velkomstmeddelelse.


Søg
Reklame
Statistik
Spørgsmål : 177503
Tips : 31968
Nyheder : 719565
Indlæg : 6408544
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste