PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   POP3-Postfach auslesen OHNE imap (http://www.selfphp.de/forum/showthread.php?t=9898)

schimanski2 03.03.2005 11:35:52

POP3-Postfach auslesen OHNE imap
 
Moin Moin,

ich möchte gerne ein Script anfertigen, mit dem ich ein Mail aus einem POP3-Postfach auslesen kann. Das ganze aber ohne die IMAP-Funktionen, da mein Provider kein IMAP unterstützt. Zweck des Ganzen ist es, die ausgelesen Mails automatisch weiterzuleiten. Ich habe mit den Socket-Funktionen (fget, fsockopen, usw) schon etwas rumexperimentiert und bin jetzt soweit, daß ich den Adressaten, den Absender, das Datum und auch den Betreff aus dem Header auslesen kann. Zum Test lasse ich die Daten erstmal auf dem Bildschirm anzeigen. Aber weiterhin hängt es. Ich bekomme es einfach nicht hin, den eigentlichen Mailtext auszulesen. Kann mir hier bitte eine(r) helfen?

Und hier, was ich schon gemacht habe (baut teilweise auf gefundenem aus dem Internet auf / statt den Sternchen stehen im Original natürlich die richtigen Daten):

<?php

$fp = fsockopen("mail.***************.de", 110); echo fgets($fp, 1024).'<br>';
$user_name = "pop.**************.de.002"; $user_pass = "********";
fputs($fp, "USER $user_namern"); echo fgets($fp, 1024).'<br>';
fputs($fp, "PASS $user_passrn"); echo fgets($fp, 1024).'<br>';
fputs($fp, "RETR 1rn");
echo '<br>';
// Header auslesen
for(;;)
{
$buffer=fgets($fp,1024);
if(strcasecmp(substr($buffer,0,5),"Date:")==0)
{
$maildate=substr($buffer,6,strlen($buffer)-6);
}
if(strcasecmp(substr($buffer,0,5),"From:")==0)
{
$fromperson=substr($buffer,6,strlen($buffer)-6);
$fromperson=htmlspecialchars($fromperson);
}
if(strcasecmp(substr($buffer,0,3),"To:")==0)
{
$toperson=substr($buffer,4,strlen($buffer)-4);
$toperson=htmlspecialchars($toperson);
}
if(strcasecmp(substr($buffer,0,8),"Subject:")==0) {
$subject=substr($buffer,9,strlen($buffer)-9);
$subject=htmlspecialchars($subject);
}
if(strcmp($buffer,"rn")==0 || strcmp($buffer,"nr")==0 || strcmp($buffer,"nn")==0 && $maildate!=0 && $subject!=0 && $fromperson!=0)
{
break;
}
}

// Header ausgeben
print("Subject: ".$subject."<br>");
print("To : ".$toperson."<br>");
print("From : ".$fromperson."<br>");
print("Date : ".$maildate."<br>");

fputs($fp, "QUITrn"); $line = fgets($fp, 1024);
fclose($fp);
?>

didi86 03.03.2005 13:21:01

AW: POP3-Postfach auslesen OHNE imap
 
Hi,
ich bin gerade dabei, ein Webmail-Script zu schreiben, was bisher so aussieht:
PHP-Code:

@$pop3_handle=fsockopen($in_server_url[$i],$in_port[$i]);
if(!
$pop3_handle){
    echo (
"<span class="error">Verbindung zum Server konnte nicht hergestellt werden!</span>");
}else{
    
stream_set_timeout($pop3_handle,2);
    
//Einloggen
    
$connect=fgets($pop3_handle,512);
    
fputs($pop3_handle"user $in_user[$i]rn");
    
$user=fgets($pop3_handle,512);
    
fputs($pop3_handle"pass $in_pass[$i]rn");
    while(
$pass==""){
        
$pass=fgets($pop3_handle,512);
        
usleep(100000);
    }
    if(
substr($pass,0,3)!="+OK"){
        echo (
"<span class="error">Fehler beim Login: ".substr($pass,5)."</span>");
    }else{
        
fputs($pop3_handle"retr $mailrn");
        
$line fgets($pop3_handle512);
        
$header=true;
        while (
substr($line  =  fgets($pop3_handle512), 01) != ".") {
            if(!
$header){
                if(
strtolower($content_transfer_encoding)=="quoted-printable"){
                    
$line2=$line;
                    
$line="";
                    do{
                        if(
substr($line2,0,1)=="="){
                            
$line=$linechr(hexdec(substr($line2,1,3)));
                            
$line2=substr($line2,3);
                        }else{
                            
$line=$linesubstr($line2,0,1);
                            
$line2=substr($line2,1);
                        }
                    }while(
strlen($line2)>0);
                }
                if(
substr($content_type,0,10)=="text/plain" or $content_type==""){
                    
$message.="<br>rn";
                }
                
$message.=$line;
            }else{
                
//$message.="<br>rn".$line;    //Einkommentieren um Header in Mails mit anzuzeigen
                
if(strtolower(substr($line,0,6))=="status"){
                    
$header=false;
                }
                if (
strtolower(substr($line,0,5))=="from:"){
                    
$from=substr($line,6);
                }elseif (
strtolower(substr($line,0,8))=="subject:"){
                    
$subject=substr($line,9);
                }elseif (
strtolower(substr($line,0,5))=="date:"){
                    
$date=substr($line,6);
                }elseif (
strtolower(substr($line,0,26))=="content-transfer-encoding:"){
                    
$content_transfer_encoding=trim(substr($line,27));
                }elseif (
strtolower(substr($line,0,13))=="content-type:"){
                    
$content_type=trim(substr($line,14));
                }elseif (
strtolower(substr($line,1,9))=="boundary="){
                    
$boundary=substr(trim(substr($line,10)),1,-1);
                }
            }
        }
        if(
$content_type=="multipart/alternative;"){
            
$multipart=explode($boundary,$message);
            
$c=0;
            
$val=0;
            echo(
"Diese E-Mail liegt in folgenden Formaten vor: ");
            foreach(
$multipart as $m){
                if(
$c>0){
                    
$mline=explode("n",$m);
                    
$header=1;
                    
$content_type2="";
                    
$content_transfer_encoding="";
                    foreach(
$mline as $lline){
                        if(
$header==1){
                            if (
strtolower(substr($lline,0,13))=="content-type:"){
                                
$content_type2=trim(substr($lline,14));
                                echo(
$content_type2.", ");
                                if(
substr($content_type2,0,10)=="text/plain" and $val<2){
                                    
$message=$m;
                                    
$val=2;
                                }elseif(
substr($content_type2,0,9)=="text/html" and $val<3){
                                    
$message=$m;
                                    
$val=3;
                                }elseif(
$val<1){
                                    
$message=$m;
                                    
$val=1;
                                }
                            }elseif (
strtolower(substr($lline,0,26))=="content-transfer-encoding:"){
                                
$content_transfer_encoding2=trim(substr($line,27));
                                
$header=0;
                            }else{
                            }
                        }
                    }
                }
$c++;
            }echo(
"<br><hr width=100%>");
        }
        echo(
$message);
        
fputs($pop3_handle,"quitrn");
        
$antwort=fgets($pop3_handle,1024);
    }
fclose($pop3_handle);


Das Script kommt derzeit mit etwa der Hälfte meiner Mails klar und unterstützt noch keine Attachments...


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:12:16 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.