email fgets pop3 strato
andi_b
- php
0 XaraX0 Sven Rautenberg
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">';
}
}
hallo andi,
ich muss aber bei strato mit smtp senden, weil (ebenfalls afaik) man das dort nur so machen kann...
Wenn ich Dich richtig verstanden habe, veranstaltest Du so ein Brimbamborium, weil Du über ein PHP-script Mails versenden willst. Richtig?
mail() ist die Funktion, die Du brachst! http://www.php.net/manual/en/function.mail.php
Sicher kannst Du bei Strato auch über imap-Funktionen senden, aber solange es nur um den Ausgang von Mails an die Welt geht, reicht m. E. mail() aus.
Gruß aus Berlin!
eddi
Moin!
das problem ist, dass man um bei strato eine mail sendne zu können, afaik man vorher eine pop3-anfrage starten muss. 'spam' sicherheit...
Es wäre überaus ungewöhnlich, wenn man von einem Webserver, welcher eine Mail verschicken will, zuerst einen POP3-Kontakt herstellen müßte. Sowas ist im Prinzip nirgendwo notwendig, und es ist technisch auch unnötig.
Insofern: Gib mehr Informationen. Und bedenke: Das SMTP-Mailen mit deinem Mailprogramm, welches von irgendeiner IP aus kommen kann, ist was anderes, als das Mailen von dem Strato-Webserver aus, welcher dem Strato-SMTP-Server bekannt ist, auf dem deine Website einen Account hat und für den man dich im Mißbrauchsfall (ob beabsichtigt oder nicht) zur Verantwortung ziehen könnte.
- Sven Rautenberg
hallo ihr beiden,
danke erstmal für eure mühen. den aspekt 'zwischen dem unterschiedvon zu hause, oder von strato' habe ich noch nicht bedacht. insofern könnte mail() tatsächlich funktionieren, weil es ja egal wäre, ob ich die imap-funktionen zur verfügung habe (die gibts aber mit sichelheit nicht).
aber ich kann mit grosser freude verkünden, dass jetzt auch die pop3-klasse funktioniert. der fehler lag daran, dass die strings:
'USER '.$user.'\r\n'; //falsch
etwas anderes ergeben wie
"USER ".$user."\r\n"; //richtig
oder
"USER $user\r\n"; //richtig
der unterschied iist mir zwar noch nicht klar, aber das ist erstaml zweitrangig.
also, bis latersen,
andi
hi,
der unterschied iist mir zwar noch nicht klar, aber das ist erstaml zweitrangig.
der steht hier http://www.php.net/manual/de/language.types.string.php erklärt:
"Anmerkung: Anders als bei den zwei anderen Schreibweisen werden Variablen und escape-Sequenzen für spezielle Zeichen innerhalb von single-quoted Strings nicht ausgewertet."
gruss,
wahsaga