mail2blog Extension in Arbeit

Arbeite seit gestern Abend an einer mail2blog Extension für BlogEngine.net.

Das ist so ziemlich das einzige Feature das mir abgeht. dasBlog hatte diese Funktion schon als ich began diese Blog-Software zu benutzen, und ich habe sie auch mehrere male benutzt. Alle Einträge der mobile-Kategorie (ausgenommen der Ankündigung vom m600i) wurden von meinem alten Handy (SE v600i) geschrieben.

Habe damals einfach eine MMS an die eingetragene E-Mail Adresse geschickt, und dasBlog hats dann irgendwann abgeholt und ins Blog gestellt.

Zuerst hats nicht ganz funktioniert, weil soweit ich mich erinnern kann war einer der E-Mail Header nicht ganz korrekt, und wurde deswegen nicht erkannt. Das Problem wurde aber schnell behoben, und dem Mobile-Blogging stand nichts mehr im Wege.

In letzter Zeit vermisste ich diese Funktion zunehmends, und gestern rappelte ich mich auf und habe mit der Umsetzung einer solchen Extension begonnen.

Der erste Schritt war es eine pop3 Library zu finden, da es keine fertige Klasse dafür momentan im Framework gibt. Selbst wollte ich das pop3-Protokol nicht implementieren. Wozu auch, wenn sich jemand bereits die Arbeit gemacht hat. So ist es auch eine Fehlerquelle weniger.

Bei codeproject wird man auch schnell fündig. Entschieden habe ich mich für den Pop3MimeClient. Lässt sich recht einfach benutzen, und kann alles was ich brauche.

Klingt ja nun schon so als wäre das jetzt einfach nur noch ein zusammenstopseln, aber einige überlegungen musste noch gemacht werden.

Wann sollen die Mails abgeholt werden? Was ist mit Multipart Nachrichten? Und Attachments?

Für erstere Frage habe ich mir 2 Sachen überlegt. Entweder wird beim Erstellen der Extension ein neuer Thread erstellt, welcher in eine Endlosschleife versetzt wird und dann für das Abholen der E-Mails verantwortlich ist. Oder aber ich überprüfe bei Blog-Aufruf wann zuletzt die E-Mails abgeholt wurden und starte beim Überschreiten dieser Zeitspanne einen neuen Thread der einmalig die E-Mails abholt und Blogeinträge daraus erstellt.

Entschieden habe ich mich für beide Versionn, wobei die Erstere die Standardeinstellung ist. Für alle jene, die keinen Thread im Hintergrund laufen haben wollen gibt es dann noch die 2. Möglichkeit, welche mir allerdings nicht ganz so gut gefällt, weil das E-Mail abholen von den Aufrufen des Blog abhängig ist.

Multipart? Tja.. da bin ich mir noch nicht sicher ob ichs richtig gemacht habe, aber ich glaube schon. Muss mal mehrere Mails verfassen und das ganze austesten. Mit E-Mails von Windows Live Mail und über den BlackBerry Client am m600i klappt es auf jedenfall. Auch mit Attachements.

Wo wir gerade von diesen sprechen. Wenn bei den mail2blog Nachrichten Attachments angehängt sind, sinds wohl entweder Bilder die man anzeigen möchte, oder downloads. Was sonst auch.
Bei meiner aktuellen Version werden alle Attachments im file-Ordner gespeichert (nach Datum sortiert, bzw. Monat und Jahr), und im Nachrichtentext nach den Dateinamen gesucht. Diese werden dann durch einen entsprechenden Aufruf von File- beziehungsweise Imagehandler der Blogengine ersetzt.

In Verbindung mit meinem TextFormatter funktioniert das ganz gut. Einfach einen Link oder ein Bild über en entsprechenden Code einfügen, und als Ziel den Dateinamen angeben. Pfad wird automatisch geändert, und funktioniert. =)
Was dabei allerdings noch getan werden muss, ist eine Überprüfung ob der Filehandler oder der Imagehandler aufgerufen wird.

Die aktuelle Version rennt schön stabil, und funktioniert prächtig. Alle eingehenden E-Mails werden zusätzlich noch in einer Textdatei gespeichert, damit nichts verloren geht.

Um Spam zu verhindern muss die E-Mail mit einem gewissen Text im Betreff beginnen, und nach jedem durchlauf wird das E-Mail Konto geleert. Damit keine Nachricht doppelt im Blog erscheint. (Deswegen auch die Sicherung aller E-Mails)

Was ich mir noch überlege ist ob ich eine Bestätigungs-Email an den Absender schicken soll. Mal sehen. =)

Ach, Tags werden auch unterstützt. Die hole ich mir auch aus dem Betreff, und die Kategorie unter welcher der Eintrag erscheinen soll ist einstellbar.