kostenloser Webspace werbefrei: lima-city


Mails verschieben

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mrjack

    mrjack hat kostenlosen Webspace.

    Hallo!
    Ich habe eine Verbindung zu meinem POP3-Mailaccount aufgebaut. Jetzt will ich die Mails darin in einen Unterordner der Mailbox verschieben (nennen wir den Unterordner "Test").
    Das sollte doch mit dem imap_mail_move Befehl funktionieren. Wie genau sieht der Befehl jetzt in der Praxis aus, denn bei mir funktioniert er nicht.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Der folgende Code verschiebt die Messages im $msg_no[] Array vom Verzeichnis $mbox_name in das Verzeichnis $newmbox_name.
    Wobei $mbox eine vorhandene IMAP Resource sein muß.

    <?php
    // Verbindung zu einem IMAP server auf Port 143 des lokalen Rechners
    $mbox = imap_open("{localhost:143}INBOX", "user_id", "password");
    
    if ($mbox_name != $newmbox_name) {
      reset($msg_no);
      $messageset = implode (",",$msg_no);
      imap_mail_move($mbox,$messageset,$newmbox_name);
      imap_expunge($mbox);
    } 
    ?>


    Grüßle

    Beitrag geaendert: 11.5.2007 18:24:08 von scout
  4. Hm, pop3 ist aber nicht gleich imap...
  5. Hmm stimmt, hab ich mal glatt überlesen ;-) ...auf dem Server muß natürlich IMAP zur Verfügung stehen. Mit POP3 hat man immer nur Zugriff auf den Inbox Ordner.

    Grüßle
  6. Autor dieses Themas

    mrjack

    mrjack hat kostenlosen Webspace.

    D.h. ohne IMAP geht nichts? Schade, dann muss ich mein Problem anders lösen.
    Vielleicht habt ihr ja eine Lösung:
    Ich benutze auf Vorschlag von scout (Danke!) XPertMailer v.2.0.3 um meine Mails auszulesen. Ich lese immer das letzte Mail der Mailbox aus und speichere es dann in eine Datenbank.
    Jetzt würde aber immer das gleiche Mail in die Datenbank geschrieben werden, deswegen wollte ich das gespeicherte Mail in einen Unterordner der INBOX verschieben, damit dann das nächste Mail gelesen wird. Löschen will ich es auch nicht. Was kann ich tun?

    Beitrag geaendert: 12.5.2007 11:05:10 von mrjack
  7. ok soo wie du dir das denkst geht es natürlich nicht...

    POP3 übermittelt keine Infos ob die Mail schon heruntergeladen wurde oder nicht.
    Du mußt also bei POP3 IMMER die gesamten Mails herunterladen und dann kann man leider erst schauen ob man die Mails schon heruntergeladen hat.
    Ein herunterladen von nur Betreffzeilen oder Mail-IDs ist bei POP3 leider nicht möglich.

    Man lässt sich also die Mails geben und wertet dann den Mail-Header aus... insbesondere müsstest du die Message-ID (siehe Headerzeilen) in der Datenbank speichern.
    Über diese Message-ID im eMail-Header weiß man dann, ob man diese Mail schon hat oder nicht.

    Hab dir mal ein kleines Script gemacht, was den Header ausliest ;-)
    Aber MrJack bei dem XPertMailer sind doch eigentlich Beispiele dabei, wie man Mails abholt ;-)

    <?
    /*
    * Codeschnipsel mit XPertMailer v2.0.3 www.xpertmailer.com
    */
    error_reporting(E_ALL);
    set_time_limit(0);
    
    require_once 'class/pop3.php';
    
    $conn = POP3::Connect('mail.bspserver.de', 'username', 'password');
    
    $stat = POP3::pStat($conn);
    echo ('<br>Messages: '.$stat[0].', in total '.$stat[1].' Bytes<br>');
    
    // get size of each message
    $sall = POP3::pList($conn);
    
    if($sall){
    	echo '<br>All messages:<br>';
    	foreach($sall as $num => $val) echo $num.' => '.$val.' Bytes<br>';
    }else echo 'Error 2';
    
    for($i=0;$i<$stat[0];$i++) {
    	$num = $i + 1;  // Mail-Nummer ist $i+1
    	$data = POP3::pRetr($conn, $num) or die('Error 3: Can not read the mail no. '.$num.' !');
    	$msg = FUNC::split_content($data);
    	if(!($msg && isset($msg['header'], $msg['body']))) die('Error 4: Invalid e-mail message!');
    	
    	echo "<br>\nMessage ".$num."<br>\n";
    	foreach ($msg['header'] as $harr) {
    		foreach($harr as $hname => $hvalue) {
    			echo "  ".$hname." = ".$hvalue."<br>\n";
    		}
    	}
    }
    
    POP3::pQuit($conn);
    
    ?>


    Du mußt also deine Mails nicht unbedingt verscheiben, sondern so wie jeder andere Mailer auch, einfach die Message-ID mit deiner DB vergleichen.
    Wenn du diese schon hast, dann Mail hinzufügen, ansonsten nächste Mail-ID untersuchen.

    Grüßle

    Beitrag geaendert: 12.5.2007 14:23:27 von scout
  8. Autor dieses Themas

    mrjack

    mrjack hat kostenlosen Webspace.

    Wie vergleiche ich die Message-ID mit den MIDs in der Datenbank?
    Ich selektiere alle MIDs aus der Datenbank.
    Wie kann ich jetzt prüfen ob der $num-Wert ein Wert dieses Selects ist?

    Beitrag geaendert: 25.5.2007 13:48:33 von mrjack
  9. Autor dieses Themas

    mrjack

    mrjack hat kostenlosen Webspace.

    Wie bekomme ich die Message-ID aus der Mail?
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!