# E-Mails aus Postfach auslesen und in db speichern



## schultze (8. September 2005)

Hallo Leute,

habe ne kurze Frage. Ich möchte das meine Datei imap.php die E-Mails von einem POP3 Postfach ausliest, die Daten der E-mails in einer Datenbank speichert und danach die E-Mail endgültig löscht. Habe dazu folgenden Code... (ein Teil hier im forum gefunden)


```
<?php 

// POP3-Server 
$host="localhost"; 
$port="110"; 
// User-Daten 
$user="bn"; 
$passwort="pass"; 

// Verbinden zur Mailbox 
$mailbox=imap_open("{".$host."/pop3:110}INBOX",$user,$passwort); 

// Überprüfen ob Verbindung erfolgreich, 
// dann weiter... 
if ($mailbox) 
{ 
// Posteingang überprüfen 
$check=imap_check($mailbox); 
// Anzahl vorhandener Emails im Postfach 
$count_msg=$check->Nmsgs; 
// Anzahl neuer Emails im Postfach 
$count_new_msg=$check->Recent; 
// Emails auslesen 
for ($i=1; $i<=imap_num_msg($mailbox); 
$i++) 

{ 

// Header erfassen 
$mail_header=imap_header($mailbox, $i); 

// Datum erfassen 
$mail_date=$mail_header->Date; 

// Mail-ID erfassen 
$mail_id=$mail_header->message_id; 

// Empfänger erfassen 
$mail_to=$mail_header->toaddress; 

// Absendername erfassen 
$mail_from_name=$mail_header->from [0]->personal; 

// Absender-eMail-Adresse erfassen 
$mail_from_address=$mail_header->from [0]->mailbox."@".$mail_header->from [0]->host; 

// Kopieempfänger erfassen 
$mail_copy_to=$mail_header->cc[0] ->mailbox."@".$mail_header->cc[0] ->host; 

// Antwortempfänger erfassen 
$mail_answer_to=$mail_header->reply_to; 

// Betreff erfassen 
$mail_subject=$mail_header->subject; 

// Nachricht erfassen
$mail_body = imap_body($mailbox,$i); 


// Daten in db speichern
include ("config.inc.php");

  $eintrag = "INSERT INTO support (vorname, mail, betreff,  anfrage, datum) VALUES ('$mail_from_name', '$mail_from_address', '$mail_subject', '$mail_body', '$mail_date')";
  $eintragen = mysql_query($eintrag);
  

echo "e-Mail Nr.".$i."<br>"; 
// Ausgabe in HTML 
echo '<b>Versendet am:</b> '; 
echo $mail_date."<br>"; 

echo '<b>Eindeutige eMail-ID: </b>'; 
echo $mail_id."<br>"; 

echo '<b>Empfänger: </b>'; 
echo $mail_to."<br>"; 

echo '<b>"Name des Absenders: </b>'; 
echo $mail_from_name."<br>"; 

echo '<b>"eMail des Absenders: </b>'; 
echo $mail_from_address."<br>"; 
// echo $mail_from_address."<br>"; 

echo '<b>Betreff: </b>'; 
echo $mail_subject."<br><br>"; 

echo '<b>Nachricht: </b>'; 
echo $mail_body."<br><br>"; 


// E-Mail löschen löschen
 imap_delete($mailbox, $i); 
 imap_expunge($mailbox);


} 
imap_close($mailbox); 
} 
?>
```

Folgendes Problem dabei: angezeigt werden alle Mails, es wird aber nur die erste in die Datenbank geschrieben und die anderen nicht. Des weiteren wird auch nur die erste Gelöscht! Was ist an dem Code falsch?

Danke für eure Hilfe...

*Respect*


----------



## Ruediger (7. Juni 2006)

Besser spät als nie:


```
imap_expunge($mailbox);
```

muss aus der Schleife raus und vor 


```
imap_close($mailbox);
```

dann sollte es gehen.


----------

