Neuen Kommentar schreiben

Mailhandler - Content via eMail veröffentlichen

Holger Weischenberg | Do, 12. Mär. 2015 - 17:12

Bloggen via Mail in Drupal (Pain in the ass)

Folgende benötigte Module installieren:
drupal.org/project/mailhandler
drupal.org/project/feeds
drupal.org/project/job_scheduler

Als erstes wird das Modul Mailhandler konfiguiert:

meineseite.de/admin/structure/mailhandler

Auf "Hinzufügen" klicken damit eine neue Mailbox erstellt wird.

  1. als Protokoll habe ich IMAP gewählt
  2. Die Domäne des Webservers eintragen. Die Domäne setzt sich aus Protokoll.2nd-level-label.Top-level-domain (z.B. imap.web.de) zusammen
  3. Den Port eintragen. Bei IMAP ist das in der Regel der Port 993
  4. Benutzername: eMail-Adresse des Postfachs hinterlegen - hier ruft Mailhandler die Mails ab, die in Content umgewandelt können werden
  5. Passwort des Postfachs hinterlegen
  6. Extra commands: Hier musste ich für meinen Anbieter /ssl/novalidate-cert hinterlegen. Einige Beispiele für verschiedene Anbieter findet man auf drupal.org/node/207366
  7. Speichern

Jetzt habe ich einen Inhaltstyp angelegt, der den mittels eMail gesendet Content aufnimmt. Es sollte eine grüne Drupal Meldung erscheinen die lautet "Mailhandler was able to connect to the mailbox" und "There are X messages in the mailbox folder". 

meineseite.de/admin/structure/types/add

Zuletzt muss mittels des Moduls Feeds ein Importer eingerichtet werden, der Content einer Node zuteilt. 

meineseite.de/admin/structure/feeds/create

  1. In den Grundeinstellungen wird dem Importer ein frei wählbarer Name zugewiesen, desweiteren kann man unter Periodic import einstellen, wie häufig eMail abgerufen werden sollen (die Einstellungen ist aber auch vom Cron des Kerns abhängig). Weitere Einstellungen können angepasst werden oder auf default belassen werden. Speichern.
  2. Fetcher, bzw. in der Übersetzung Abrufer ändern. Hier wird Mailhandler fetcher ausgewählt. Speicher
  3. Fetcher, bzw. Abrufer Einstellungen anpassen. Hier kann eingestellt werden, ob Nodes und/oder Comments mit Mail-Content bedient werden sollen. Speichern. 
  4. Parser ändern. Hier wird Mailhandler IMAP stream parser ausgewählt. Speichern.
  5. Parser Einstellungen. Hier können commands eingetragen werden - leider konnte ich diese Funktionalität bisher nicht aktivieren, siehe Nachtrag.
  6. Prozessor, bzw. Processor ändern. Default ist Node processor deshalb sind hier keine Änderungen notwendig.
  7. Node Processor Einstellungen. Unter Bündel den Importer mit dem im zweiten Schritt erstellten Inhaltstyp verbinden. Als Textformat "Filtered HTML" auswählen (siehe unten Sicherheit). Der Autor der den Mails zugewiesen soll, kann hier ebenfalls festgelegt werden,darauf achten, wenn Autorisieren aktiviert ist, dass der User auch die Rechte hat, einen Inhalt zu erstellen. Alle weiteren Einstellungen können auf die Default bleiben oder entsprechend eigener Wünsche eingestellt werden. 
  8. Prozessor Zuordnung. Hier wird bestimmt, wie der Inhalt der eMail in der Node bereitsgestellt werden soll. Als Minimumeinstellungen sollte man z.B. den Betreff (Quelle) dem Titel (Ziel) der Node zuordnen und den Body (HTML), ebenfalls Quelle, als Ziel den Body der Node zuordnen. Speichern.

Der Importer ist damit erstellt und muss jetzt aktiviert werden. Dazu meineseite/import aufrufen und dort den geraden erstellten Importer auswählen. Dann auf den Button "importieren" drücken. Falls eMail auf dem konnektierten Server vorliegen, werden diese nun abgerufen und in Nodes umgewandelt. Einmal angestoßen, werden eMail ab jetzt automatisch abgerufen - allerdings muss dafür ein Cronlauf durchgeführt werden. D.h. je nachdem wie häufig man etwas posten möchte, sollte unter meineseite.de/admin/config/system/cron die Zeit zwischen den Cronläufen angepasst werden.

Noch ein Hinweis zur Sicherheit - da mir es leider nicht möglich war, z.B. das wichtige command "pass" für Passwort zu aktivieren (siehe unten), kann es leicht geschehen das Spam auf der Seite landet. Deshalb sollte man für diese Zwecke eine eigene unbefleckte eMail-Adresse einrichten (möglichst nicht bei einem Anbieter, der Werbemails versendet). Eine weitere Möglichkeit der Security by obscurity ist ein möglichst kryptische eMail-Adresse. Auf jeden Fall sollte das Textformat "Filtered HTML" verwendet werden, um Schadcode von der Website fernzuhalten. Falls doch einmal ungewünschter Mailcontent durchkommen sollte, habe ich eine View eingerichtet, die den eMail-Content bereitstellt und nur Inhalte mit einem bestimmten Schlüsselwort bereitstellt. Alles andere landet zwar auf der Seite, ist aber mangels Verlinkung nur über die Suchfunktion auffindbar (gleichzeitig informiert mich das Kernmodul Trigger über neuen Content). Wer den Luxus eines eigenen eMail-Servers hat, kann sich diese Schritte natürlich sparen...

Nachtrag - Mailhandler bietet die Möglichkeit mittels commands im eMail-Body bestimmte Aktionen anzustoßen. Zum Beispiel das command status: 1 sorgt dafür das eine eMail publiziert wird (status: 0 sorgt dafür, dass Mail unveröffentlicht gespeichert werden). Allerdings bekomme ich derzeit für das Plugin MailhandlerCommandsDefault.class.php eine Fehlermeldung und commands im eMail-Body werden nicht angenommen. Auch command Voreinstellungen im Feeds Parser werden ignoriert. Hilfestellungen oder Hinweise zur Lösung des Problems wären schön! Eine entsprechende Problembeschreibung (das scheinbar seit dem letzten Update besteht), ist auf der Modul-Projektseite auf drupal.org zu finden. 

Quellen:
peterthorndycraft.com/tutorial/mailhandler
streamconsulting.nl
drupal.org/node/207366
webtotum.de/blog/beitraege-in-drupal-per-e-mail-erstellen

Mailhandler commands:
drupal.org/node/38943

Module