MailScanner markiert eMails als gelesen

Hallo,

Heute möchte ich über ein Problem schreiben, welches sicherlich schon für das eine oder andere graue Haar des Administrators gesorgt hat.

Das MailScanner Modul ist grundsätzlich sehr nützlich, wenn es darum geht, eMails einer Person zuzuordnen. Es hat allerdings ein Problem, welches es einen Einsatz praktisch verbietet, sobald Google Mail im Spiel ist.
Evtl. sind noch andere Mailserver betroffen, aber ich habe es bereits mehrfach bei Google Mail bemerkt.

Der MailScanner implementiert das IMAP Protokoll, welches für den Mailtransport zuständig ist.
Dieses Protokoll besagt, dass bei korrekter Implementierung am Server, das „gelesen“-Flag automatisch gesetzt wird, sobald der Body übertragen wird. Theoretisch sollte es also jeden Server betreffen.
Die meisten davon übersehen diese Festlegung aber, da dadurch mehr Probleme entstehen als gelöst werden.

Google Mail allerdings hält sich nah an der Spezifikation und setzt daher dieses Flag automatisch. Umgehen kann man diese Aktion nur, wenn man das „PEEK“ Attribut beim Abrufen des Body mitsendet, was beim MailScanner nicht getan wird.
Dieser Umstand lässt sich aber sehr einfach ändern.

Solltet Ihr also dieses Problem haben, findet Ihr hier die Lösung dafür:

Öffne: modules/Settings/MailScanner/core/MailRecord.php

Suche:

imap_fetchbody($imap,$messageid,$partno):  // multipart
imap_body($imap,$messageid);               // not multipart

Ersetze diese beiden Zeilen mit:

imap_fetchbody($imap,$messageid,$partno, FT_PEEK):  // multipart
imap_body($imap,$messageid, FT_PEEK);               // not multipart

Erfolgreich getestet habe ich diese Umstellung unter PHP 5.3 und vtiger 5.4.0.
Wenn Ihr eine andere Umgebung nutzt und die Funktion bestätigen könnt, würde ich mich über einen kurzen Kommentar freuen.

Stefan

Schreibe einen Kommentar