Discussion:
Sonderzeichen in Mailboxname
(zu alt für eine Antwort)
luk
2006-03-10 08:49:03 UTC
Permalink
Hallo

Beim öffnen einer IMAP-Verbindung mit imap_open() taucht das Problem
auf, dass gewisse Postfächer scheinbar keine Nachrichten enthalten. Es
handelt sich dabei lediglich um diejenigen Ordner, die Sonderzeichen
wie ä, ö oder ü enthalten, also "Gelöschte Objekte" oder
"Entwürfe" zum Beispiel. Der Verbindungsaufbau geschieht
folgendermassen:

$conn = imap_open('{server.com:143}INBOX/Entwürfe', $user, $pass);

Brauch ich den Ordnernamen irgendwie zu codieren oder habt ihr
irgendwelche konkreten Lösungsvorschläge?

Vielen Dank für die Hilfe.
mfG
Lukas
Carsten Wiedmann
2006-03-10 09:48:03 UTC
Permalink
Post by luk
Beim öffnen einer IMAP-Verbindung mit imap_open() taucht das Problem
auf, dass gewisse Postfächer scheinbar keine Nachrichten enthalten. Es
handelt sich dabei lediglich um diejenigen Ordner, die Sonderzeichen
wie ä, ö oder ü enthalten, also "Gelöschte Objekte" oder
"Entwürfe" zum Beispiel. Der Verbindungsaufbau geschieht
$conn = imap_open('{server.com:143}INBOX/Entwürfe', $user, $pass);
Brauch ich den Ordnernamen irgendwie zu codieren oder habt ihr
irgendwelche konkreten Lösungsvorschläge?
a) selbst wenn der Order in z.B. Outlook sich "Gelöschte Objekte" oder
"Entwürfe" nennt, heissen diese Stammorder auf dem Server trotzdem i.d.R.
"Deleted Items" und "Drafts".

b) für andere Ordner mit Umlauten kann dir imap_utf7_decode() weiterhelfen.

Wie sich deine Ordner tatsächlich nennen, kannst du z.B. mit dem Script
Example 2 auf der Manualseite von imap_open() herausfinden.

Gruß
Carsten
luk
2006-03-10 10:26:00 UTC
Permalink
Danke für deine Antwort. Ich konnte dank deiner Hilfe eine Lösung
für das Problem finden, allerdings war es doch etwas komplizierter.
Ich bin mir nicht sicher, ob die PHP-Funktion imap_listmailbox() oder
der Mailserver den Fehler verursacht:

Als ich die Hex-Zeichen der Ordnernamen untersuchte, stellte ich fest,
dass vor Umlauten immer das ASCII-Zeichen 0 erscheint. Somit muss der
Aufruf für Ordner mit Umlauten wie folgt aussehen:

$conn =
imap_open('{server.com:143}/'.imap_utf7_encode('Entw'.chr(0).'ürfe'),
$user, $pass);

anstatt nur

$conn = imap_open('{server.com:143}/'.imap_utf7_encode('Enwürfe'),
$user, $pass);

mfG
Lukas
Carsten Wiedmann
2006-03-10 12:23:39 UTC
Permalink
Post by luk
Als ich die Hex-Zeichen der Ordnernamen untersuchte, stellte ich fest,
dass vor Umlauten immer das ASCII-Zeichen 0 erscheint. Somit muss der
Tatsache, ob das so gewollt war in der Funktion? Ein Copy 'n Paste - Versuch
einer Ausgabe von imap_utf7_decode() im Browser bestätigt auch, dass vor dem
Umlaut aufgehört wird zu kopieren *grübel*

War das schon immer so?
Post by luk
$conn =
imap_open('{server.com:143}/'.imap_utf7_encode('Entw'.chr(0).'ürfe'),
$user, $pass);
anstatt nur
$conn = imap_open('{server.com:143}/'.imap_utf7_encode('Enwürfe'),
$user, $pass);
Was auch geht ist:
| $conn =
| imap_open('{server.com:143}/'.
| mb_convert_encoding('Entwürfe', 'UTF7-IMAP', 'ISO-8859-1'),
| $user, $pass
| );


Gruß
Carsten
luk
2006-03-10 14:46:20 UTC
Permalink
Ob das so gewollt war? Ich bin mir nicht ganz sicher, aber ich wage nun
mal zu behaupten, dass das Problem beim Mailserver liegt. Wie gesagt,
habe ich die verschiedenen Ordner mittels imap_listmailbox() ausgelesen
und anhand der Ausgabe das NUL-Zeichen feststellen können.

Der erhaltene, codierte Wert lautet A. Der Decodierte, also mit dem
NUL, lautet B. Wenn ich nun B wieder verschlüssle, erhalte ich wieder
A. Öffne ich die Verbindung mit A, erhalte ich alle Mails aus dem
Verzeichnis.

Wenn ich, bevor ich B wieder verschlüssle, das NUL-Zeichen entferne,
erhalte ich nach dem Verschlüsselungsvorgang den Wert C. Ich erhalte
beim Login mit C jedoch keine Nachrichten.

Der Mailserver braucht den Verschlüsselten Wert von Entwürfe mit dem
NUL-Zeichen, was eigentlich bedeutet, dass die Funktion alles korrekt
macht. Was mich jedoch irritiert, ist, dass dein Code mit
mb_convert_encoding() anscheinend auch funktioniert (habs jetzt nicht
mehr ausprobiert). Das würde dann eigentlich aussagen, dass
mb_convert_encoding automatisch ein NUL-Zeichen hinzufügen und somit
das Resultat verfälschen würde. Oder sehe ich das falsch?

Loading...