POP3 + mail-body wird nicht gezeigt

mC pAiN

Erfahrenes Mitglied
Hallo,

ich habe hier im Forum eine PHP-Klasse gefunden, mit der man zu einem POP3-Mail-Account connecten kann, und sich die Mails, die sich darin befinden, anzeigen lassen kann. Funktioniert auch einwandfrei, bis zu dem Punkt, an dem er den Body (also die eigentliche Mail) anzeigen lassen soll. Da steht dann immer:
---Nachrichten-Body startet hier--

This is a multi-part message in MIME format.

---Nachrichten Body endet hier---

Wie kann ich mir den Inhalt der Mail anzeigen lassen, damit ich den Inhalt weiter verarbeiten kann? Und wie sag ich dem Script, dass es immer nach einem bestimmten Zeitraum (z.B. 1h) wieder connecten soll, um die Mails abzufragen?
 
Und wie sag ich dem Script, dass es immer nach einem bestimmten Zeitraum (z.B. 1h) wieder connecten soll, um die Mails abzufragen?

Dem Script kannst Du das nie und nimmer sagen! Ein PHP-Script wird vom Client angefordert -> der PHP-Interpreter verarbeitet es -> Daten werden zurück gegeben -> fertig. Wenn Du das Script kontinuierlich aufrufen willst, dann arbeite mit Cronjobs (Suchfunktion) oder rufe das Script HTML-seitig durch meta-refresh oder ähnliches nochmal auf.
Eine andere Möglichkeit wäre, das Script non-stop laufen zu lassen (Schleife) und nach einer Stunde die Mails erneut abzufragen. Dann bekommst Du aber wahrscheinlich Probleme mit Deinem Provider.

mfg, snuu
 
Zuletzt bearbeitet:
Du könntest ein Meta-Refresh machen, was aber von der HTML-Seite bzw dem Browser der die Seite anzeigt ausgeht. Die Url wäre dann einfach die aktuelle, die auch gerade angezeigt wird, falls dir das weiterhilft.
 
Hallo,

ich hab ein kleines Script zum Abfragen meiner Mailbox geschrieben.
Es zeigt alle wichtigen Daten an, allerdings sozusagen "am Stück" :-)
Man könnte es mit ein paar Feinheiten ganz gut anpassen.
Wichtig ist, dass IMAP auf Deinem Server installiert ist.

PHP:
include("config.php"); // Hier stehen User und Passwort drin...
$mailbox = imap_open("{localhost/pop3:110}INBOX", "$user", "$passwd"); // Mailbox öffnen
echo "<p><h1>Nachrichten in der Inbox</h1>\n";
$sortbox = imap_sort($mailbox,SORTARRIVAL,1); // Sortierung, zeigt aktuellste Nachricht zuerst
if($sortbox == false)
	{
    echo "Zugriff gescheitert<br>\n";
	}
else
	{
    while(list($key, $val) = each ($sortbox))
		{
        echo "<pre>" . $val . ". Nachricht:<br>\n"; // Ich mach das mit dem <pre>-Tag, dann lässts sich besser lesen...
		$mailheader = imap_headerinfo($mailbox,$val,80,80);
		$mailsubject = $mailheader->fetchsubject; // Betreffzeile auslesen
		$mailfrom = $mailheader->from; // Absender auslesen
		$maildate = $mailheader->date; // Datum auslesen
		foreach($mailfrom as $id => $object) // Absender definieren
			{
			$fromname = $object->personal;
			$fromaddress = $object->mailbox . "@" . $object->host;
			}
		$mailbody = imap_body($mailbox,$val); // Mailbody einfügen
		echo "Betreff: " . $mailsubject . "\n";
		echo "Gesendet von: " . $fromaddress . "\n";
		echo "Gesendet am: " . $maildate . "<br>\n";
		echo $mailbody . "</pre>\n";
		}
	}

imap_close ($mailbox); // Box schließen


Liebe Grüße

NoFate
 
Zuletzt bearbeitet:
So ich habe jetzt viel an dem Script geschrieben und stelle gerade fest, dass die Daten, die ich aus der Mail brauche wohl doch nicht so leicht auszulesen sind. Hier mal die Mail, die ich verarbeiten muss (von ebay als Text-Mail):

-----------------------------------------------------------------
Herzlichen Glückwunsch xxxxx!
-----------------------------------------------------------------
Hallo xxxxx,
xxxxx hat am 18.01.04 15:34:05 MEZ den folgenden Artikel über eBay
erworben:

-----------------------------------------------------------------
KONTAKTDATEN
-----------------------------------------------------------------
Mitgliedsname: xxxxx
Name: xxxxx xxxxx
Straße: xxxxx. xxx
Ort: xxxxx xxxxxxxxxx
Land: Deutschland

-----------------------------------------------------------------
ANGABEN ZUM ARTIKEL
-----------------------------------------------------------------
Artikelbezeichnung: MASSAGEBANK / MASSAGELIEGE
EINMALIGER PREIS!
Artikelnummer: 3653403921
Angebotsende: 18.01.04 15:34:05 MEZ
Anzahl der Gebote: 6
Verkäufer: xxxxx: mailto:email@host.de
Käufer: xxxxx:
mailto:email@host.com



-----------------------------------------------------------------
Einzelheiten zur Bezahlung:
-----------------------------------------------------------------
Artikelpreis: EUR 51,00
Menge: 1
Betrag: EUR 51,00*

* Ohne Versandkosten

So jetzt zu meinem Problem. Ich habe eine Funktion geschrieben, die alle relevanten Daten aus der Mail lesen soll, z.B. ebayname, Adresse, Preis, Mail-Addy, etc...
Diese werden dann in eine Datenbank geschrieben. Das klappt auch einigermaßen, nur dass sehr viele Leerstellen enthalten sind. Das sieht hinterher in der Ausgabe schrecklich aus.
Hier mal ein Beispiel aus meinem Script:
PHP:
// Mail durchsuchen nach den gewünschten Daten
$artikel   = strtok(substr($mail, strpos($mail, 'Artikelbezeichnung: ')+strlen('Artikelbezeichnung: ')), "\n");
$art_nr    = strtok(substr($mail, strpos($mail, 'Artikelnummer: ')+strlen('Artikelnummer: ')), "\n");

Wie kann man das besser/eleganter Lösen, ohne dass irgendwelche Leerstellen mit in die DB kommen
 
Zurück