hallo liebe leute,
ich fummel mir hier seit zwei tagen einen wolf um eine email-abruffunktion mit pop3 hinzubekommen. leider bis jetzt ohne erfolg, deswegen bin ich hier...
das problem ist, dass man um bei strato eine mail sendne zu können, afaik man vorher eine pop3-anfrage starten muss. 'spam' sicherheit...
ich muss aber bei strato mit smtp senden, weil (ebenfalls afaik) man das dort nur so machen kann. also versuchte ich eine pop3 klasse auszuprobieren aus krauses php-buch, diese macht aber nicht was ich will. einfacher wäre sicherlich die imap-funktionen von php zu verwenden, diese gehen bei stato aber nicht.
ich kann euch jetzt mal den codeschnipsel poosten und hoffen, dass jemand von euch einen fehler findet - ich finde nämlich keinen. hab das ganze jetzt erstmal mit meiner adresse, unabhängig von strato getestet. leider erkennt er (bei 2 verschiedenen konten) immer den benutzer nicht.
über einen heissen tip zum vorliegenden fehler, oder wie ich die sache anders machen könnte, wäre ich sehr dankbar.
ahoisen, andi
//eigentliche klasse
class Pop3{
var $strStatus;
var $pop3;
var $arrMessages;
var $arrMessage;
function Pop3(){
$this->strStatus = array();
$this->pop3 = 0;
$this->arrMessages = $this->arrMessage = '';
}
function open($strServer, $intPort = 110){
$this->pop3 = fsockopen($strServer, $intPort);
if(!is_resource($this->pop3)){
return false;
}
$line = fgets($this->pop3, 1024);
return $this->getResult($line);
}
function user($strUser){
fputs($this->pop3, 'USER '.$strUser.'\r\n');
$line = fgets($this->pop3, 1024);
return $this->getResult($line);
}
function pass($strPass){
fputs($this->pop3, 'PASS '.$strPass.'\r\n');
$line = fgets($this->pop3, 1024);
return $this->getResult($line);
}
function mess(){
fputs($this->pop3, 'LIST\r\n');
$line = fgets($this->pop3, 1024);
if($this->getResult($line)){
while(substr($line = fgets($this->pop3, 1024), 0, 1) != '.'){
$this->arrMessages[] = $line;
}
return true;
}else {
return false;
}
}
function retr($strMessage){
list($intMessage) = explode(' ', $strMessage);
fputs($this->pop3, 'RETR '.$intMessage.'\r\n');
$line = fgets($this->pop3, 1024);
if($this->getResult($line)){
while(substr($line = fgets($this->pop3, 1024), 0, 1) != '.'){
$this->arrMessages[] = $line;
}
return true;
}else {
return false;
}
}
function dele($intMessage){
fputs($pop3, 'DELE '.$intMessage.'\r\n');
$line = fgets($pop3, 1024);
return true;
}
function quit(){
fputs($this->pop3, 'QUIT\r\n');
$line = fgets($this->pop3, 1024);
return $this->getResult($line);
}
function getResult($line){
$this->strStatus = substr($line, 0, 1024);
if(substr($this->strStatus, 0, 1) != '+'){
return false;
}else{
return true;
}
}
function showResult(){
echo '<code style="color:red">';
print_r($this->strStatus);
echo '</code><br />';
}
}
//ausgabe-klasse
class MessageBox{
var $ref;
function MessageBox($ref){
$this->ref = $ref;
}
function out($message, $type=1){
if($type == 0){
echo 'FEHLER: '.$message.'<br />';
}else{
echo 'ERFOLG: '.$message.'<br>';
}
$this->ref->showresult();
}
}
//main
$popServer = 'pop3.web.de';
$username = 'sofa77@web.de';
$password = '';
$error = false;
$myBox = &new Pop3();
$message = &new MessageBox(&$myBox);
while(true){
echo '> Host: <br />';
if(!$myBox->open($popServer)){
$message->out('Verbindung nicht möglich', 0);
$error = true;
break;
}else{
$message->out('Verbindung');
}
echo '> Benutzname: <br />';
if(!$myBox->user($username)){
$message->out('Benutzer nicht erkannt',0);
$error=true;
break;
}else{
$message->out('erfolgreich angemeldet');
}
echo '> Kennwort: <br />';
if(!$myBox->pass($password)){
$message->out('Kennwort falsch', 0);
$error=true;
break;
}else{
$message->out('akzeptiert.');
}
echo '> Nachrichten: <br />';
if(!$myBox->mess()){
$message->out('Abruf fehlgeschlagen');
$error=true;
break;
}else{
$message->out('erfolgreich.' . count($myBox->arrMessages));
}
break;
}
echo '<hr noshade size="2">';
if(!$error and is_array(($myBox->arrMessages))){
foreach($myBox->arrMessages as $strMessage){
echo '<strong>Nachricht[ '.$strMessage.' ]</strong>:<br />';
if($myBox->retr($strMessage)){
foreach ($myBox->arrMessage as $strData){
echo $strData.'<br />';
}
}else{
$myBox->showResult();
}
echo '<hr noshade size="2">';
}
}