PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pop3-Abfrage


MarkusStruebel
26.02.2002, 23:49:42
Hi,

ich möchte auf ein Pop3-Postfach per php zugreifen. Da ich phpnewbie bin, kenne ich mich also fast nicht aus...

Jedoch habe ich schon herausgefunden, dass ich zwei Möglichkeiten habe, auf einen MailServer zuzugreifen - entweder per imap_open() oder per fsockopen()

Leider bin ich echt am Verzweifeln. Ich habe mir div. Mailclienten aus dem Netz zur Ansicht gesucht, aber komme auch mit deren HTML-Codes nicht weiter...

So schwer kann das doch nicht sein...

1. POP3.serverdaten eingeben
2. Mails listen
3. Mails anzeigen
(4. Mails antworten / weiterleiten)

Hat von euch schon jemand Erfahrung damit? Weiß jmd. wie soetwas funktioniert? Weiß jmd., wo so etwas genaustens erklärt ist?

Vielen Dank für Eure Hilfe.
Markus

Pfanni
23.03.2002, 16:11:24
hallo,

habe da mal was gefunden, was dir vielleicht hilft. Rückfragen an mich sind aber zwecklos, da ich absoluter php Neuling bin und noch gar nix kann.

Grüße
Pfanni

5.4 Lösung IV: E-Mail-Abruf
POP3-Clients abfragen ist ein häufiges Problem. Damit können beispielsweise
mehrere E-Mail-Konten zusammengefasst und auf einer Website
zum Abruf bereitgestellt werden.

5.4.1 Problemstellung

Wenn Sie viel unterwegs sind, kann der Abruf von E-Mails zum Problem
werden. Zwar gibt es viele Anbieter von Free-E-Mail, die auch eine Browserschnittstelle
bieten, eine neue E-Mail-Adresse ist aber nicht immer
erwünscht. Oft werden eigene Mailserver betrieben, die mit POP3-Clients
abgerufen werden.
Der Zugriff auf die E-Mail kann zwar auch per Notebook von unterwegs
erfolgen, aber auch das ist nicht immer bei der Hand oder anschließbar.
Der hier vorgestellten Lösung liegt die Idee zugrunde, unterwegs die EMail
auf dem heimischen Server nur zu lesen und sonst nicht anzufassen.
Wenn man wieder zu Hause ist, wird die Mail mit dem normalen POP3-
Client gelesen.
Der Vorteil liegt auf der Hand:

• E-Mail wird weiterhin zentral archiviert.
• Der Abruf kann von jedem Internet-Café oder fremden Terminals aus
erfolgen, es bleiben keine Daten auf anderen Maschinen.
• Große E-Mails lassen sich vor dem Laden löschen.
Die Realisierung basiert darauf, dass SMTP-Server empfangene E-Mail in
irgendwelchen Verzeichnissen ablegen. Im Wesentlichen werden Funktionen
genutzt, die Dateien suchen und anzeigen.

5.4.2 Funktionsübersicht
Das Skript nutzt die folgenden Funktionen und Befehle:
• Dateioperationen: fopen, opendir, fclose, file
• Zeichenkettenoperationen: ereg, strpos, substr, strlen
• Formatierungen: quoted_printable_decode
• Steuerbefehle: for, while, break

5.4.3 Code und Erläuterungen
Sie finden zuerst den vollständigen Code und anschließend detaillierte
Erläuterungen zu den wichtigsten Abschnitten.


<html>
<body>
<h1>E-Mail Reader</h1>
<?
define("MAILDIR","inbox");
$fp = fopen("login.txt","r");
$login = explode("@",fgets($fp,100));
fclose($fp);
if ((($login[0] == $name) && ($login[1] == $password))
|| ($selectfile<>"")) :
$fd = opendir(MAILDIR);
echo "Dateiliste:
<br>";
while ($file = readdir($fd)) {
if (!ereg("^.",$file)) {
$nextmail = file(MAILDIR."".$file);
$lines = count($nextmail);
echo "<A HREF=default.php? _
selectfile=".$file.">".$file."</A>";
for ($i=0; $i<=$lines && _
strlen($nextmail[$i])>2; $i++) {
if (strpos($nextmail[$i], "ubject:")==1) {
echo "<br><b>Betreff:</b>".
quoted_printable_decode(
substr($nextmail[$i],8));
}
if (strpos($nextmail[$i], "rom:")==1) {
echo "<br><b>Von:</b>".
quoted_printable_decode(
substr($nextmail[$i],5));
}
}
echo "<BR>
";
if ($file == $selectfile) {
echo "<div>";
$headflag = 0;
for ($i=0; $i<=$lines; $i++) {
if (strlen($nextmail[$i])==2) {
$headflag = 1;
}
if ($headflag==1) {
echo quoted_printable_decode(
$nextmail[$i]);
echo "<br>";
if ($moreline==0 && $i==40) {
echo "<BR>
<A HREF=default.php
?moreline=1&selectfile=".
$file.">
Bis Ende anzeigen?</A>";

break;
}
}
}
echo "</div><P>";
}
echo "<A HREF="$PHP_SELF?moreline=0&selectfile=$file">
Text anzeigen?</A><hr noshade size=1>";
}
}
closedir($fd);
else :
?>
<H3>Bitte geben Sie Nutzername und Kennwort ein:</H3>
<FORM action="<?php echo $PHP_SELF ?>" method="post">
Nutzername: <INPUT type=text name=name size=20 maxlength=20>
<br>
Kennwort: <INPUT type=password name=password size=20>
<P>
<INPUT type=Submit value="Box abfragen">
</FORM>
<?
endif;
?>
</body>
</html>



Erläuterungen
Der erste Schritt besteht in der Definition des Verzeichnisses als Konstante.
Ändern Sie diesen Wert, bevor Sie das Skript ausführen.

<?
define("MAILDIR","inbox");

Nun wird die Datei LOGIN.TXT geöffnet, die Nutzernamen und ein Kennwort
in der Form name@kennwort enthält. Mit Hilfe der Funktion explode
wird diese Zeichenkette zerlegt.

$fp = fopen("login.txt","r");
$login = explode("@",fgets($fp,100));
fclose($fp);

Jetzt wird das Kennwort und der Name überprüft, beim ersten Start des
Skripts sind die beiden Variablen $name und $password leer, der if-Zweig
wird nicht ausgeführt. Statt dessen wird das Formular am Ende des
Skripts angezeigt. Erst wenn dort der richtige Name und das passende
Kennwort eingegeben wurde, wird der Inhalt des Mailverzeichnisses
abgerufen.

if ((($login[0] == $name)
&& ($login[1] == $password))
|| ($selectfile<>"")) {

Als Erstes wird nun ein Handle zum Mailverzeichnis mit opendir geöffnet:

$fd = opendir(MAILDIR);
echo "Dateiliste:
<br>";

Die while-Schleife durchläuft alle Dateien, die in dem Verzeichnis liegen.
In jedem Durchlauf wird außerdem eine Datei der Variablen $file zugewiesen

(beachten Sie, dass hier »=« und nicht »==« steht).
while ($file = readdir($fd)) {

Der if-Befehl blendet die beiden Verzeichniseinträge ».« und »..« aus,
die für das aktuelle und das übergeordnete Verzeichnis stehen. Genutzt
wird ein einfacher regulärer Ausdruck:

if (!ereg("^.",$file)) {

Nun wird mit jedem Durchlauf die komplette Datei in ein Array gelesen
(file). Außerdem wird die Anzahl der Zeilen festgestellt:

$nextmail = file(MAILDIR."".$file);
$lines = count($nextmail);

Zuerst wird der Dateiname als Link ausgegeben. Mit diesem Link kann
eine einzelne E-Mail zur Anzeige gebracht werden. Dazu wird der Dateiname
in der Variablen selectfile übermittelt:

echo "<A HREF=default.php? _
selectfile=".$file.">".$file."</A>";

Um die Anzeige aussagekräftiger zu machen, wird die E-Mail nach Zeilen
durchsucht, die den Absender und Betreff enthalten. Diese Zeilen beginnen
mit »From:« oder »Subject:«. Die Zeilen werden mit einer for-Schleife
durchlaufen, die als zweites Abbruchkriterium die Zeilenlänge hat. Der
Header einer E-Mail ist zu Ende, wenn eine leere Zeile erscheint, die Länge
mit dem Zeilenumbruch kleiner als 2 ist (strlen($nextmail[$i]>2)):

for ($i=0; $i<=$lines && _
strlen($nextmail[$i]>2); $i++) {
Die beiden if-Befehle wählen die passenden Zeilen aus:
if (strpos($nextmail[$i], "ubject:")==1) {
echo "<br><b>Betreff:</b>".
quoted_printable_decode(
substr($nextmail[$i],8));
}
if (strpos($nextmail[$i], "rom:")==1) {
echo "<br><b>Von:</b>".
quoted_printable_decode(
substr($nextmail[$i],5));
}
}
echo "<BR>
";

Die Anzeige der selektierten E-Mail erfolgt, wenn zuvor auf den oben
definierten Link geklickt wurde. In diesem Fall ist die Variable $selectfile
mit dem Dateinamen belegt. Damit die Anzeige an der richtigen Stelle
erfolgt, wird der Name mit jeder Datei verglichen:

if ($file == $selectfile) {
echo "<div>";
$headflag = 0;
for ($i=0; $i<=$lines; $i++) {
if (strlen($nextmail[$i])==2) {
$headflag = 1;
}
if ($headflag==1) {
echo quoted_printable_decode(
$nextmail[$i]);
echo "<br>";
if ($moreline==0 && $i==40) {
echo "<BR>
<A HREF=default.php
?moreline=1&selectfile=".
$file.">
Bis Ende anzeigen?</A>";
break;
}
}
}
echo "</div><P>";
}
echo "<A HREF="$PHP_SELF?moreline=0&selectfile=$file">
Text anzeigen?</A><hr noshade size=1>";
}
}
closedir($fd);
Als letztes folgt das HTML-Formular zur Abfrage von Nutzernamen und
Kennwort, was sicher keener Erläuterung bedarf.

Pfanni
23.03.2002, 16:35:30
hab da gerade noch was gefunden.
Schau mal auf:

http://www.flying-bits.de/?page=downloads&what=phlymail

cu
Pfanni

Big2k
26.03.2002, 21:05:56
bastel gerade eine art outlook auf php-basis ;-) naja nicht so komfortabel aber zum email prüfen auf reisen ist es praktisch

interesse