Email-Push-Notifikation: Difference between revisions

From
Jump to navigation Jump to search
No edit summary
No edit summary
Line 3: Line 3:
Die Idee ist, dass Emails nicht mehr in einem bestimmtem Zeitintervall abgefragt werden, sondern über die bestehende Push-Verbindung zwischen dem iOS Gerät und Apple eine Benachrichtigung gesendet wird.
Die Idee ist, dass Emails nicht mehr in einem bestimmtem Zeitintervall abgefragt werden, sondern über die bestehende Push-Verbindung zwischen dem iOS Gerät und Apple eine Benachrichtigung gesendet wird.
Diese Verbindung ist konstant und alle Benachrichtigungen kommen sofort an.
Diese Verbindung ist konstant und alle Benachrichtigungen kommen sofort an.
Es wird ein Linux Server verwendet, auf welchem Dovecot läuft. Die Push-Notifications werden über das Dovecot-plugin dovecot-xaps-plugin [https://github.com/st3fan/dovecot-xaps-plugin] ausgelößt und über den deamon dovecot-xaps-daemon [https://github.com/st3fan/dovecot-xaps-daemon] versendet.
Es wird ein Linux Server verwendet, auf welchem Dovecot läuft. Die Push-Notifications werden über das Dovecot-plugin dovecot-xaps-plugin [https://github.com/st3fan/dovecot-xaps-plugin] ausgelößt und über den Deamon dovecot-xaps-daemon [https://github.com/st3fan/dovecot-xaps-daemon] versendet.




== Anleitung: ==
== Anleitung: ==


Für diese Anleitung wird ein Linux Server mit '''Ubuntu 12.04.5''' empfohlen. Unter Ubuntu 15.04 ließ es sich nicht zum laufen bringen.
Für diese Anleitung wird ein Linux Server mit '''Ubuntu 12.04.5''' empfohlen. Unter Ubuntu 15.04 ließ es sich nicht zum Laufen bringen.


'''1. OSX Server Certificates abgreifen
'''1. OSX Server Certificates abgreifen
'''
'''


Für diesen Schritt wird ein OSX Server (20€) und eine Apple ID benötigt. Dieser Anleitung [https://github.com/st3fan/dovecot-xaps-daemon#exporting-and-converting-the-certificate] muss gefolgt werden.
Als erstes muss man sich einen OSX Server für 20€ besorgen. Dafür benötigt man eine Apple ID. Mit der folgenden Anleitung [https://github.com/st3fan/dovecot-xaps-daemon#exporting-and-converting-the-certificate] erfährt man, wie man an die benötigten Zertifikate gelangt.
Der Abschnitt "Locate the right certificate by expanding those whose name start with APSP: and then look for the certificate with a private key that is named com.apple.servermgrd.apns.mail" bedeutet, dass das Zertifikat und der Key beide gleichzeitig sichbar sein müssen. Dannach werden beide per ctrl markiert und können dann erst als p12 exportiert werden.
Der Abschnitt "Locate the right certificate by expanding those whose name start with APSP: and then look for the certificate with a private key that is named com.apple.servermgrd.apns.mail" bedeutet, dass das Zertifikat und der Key beide gleichzeitig sichbar sein müssen. Danach müssen beide per ctrl markiert und können dann erst als p12 exportiert werden.
Die erstellten Zerifikate auf dem Linux Server unter /home/USERNAME ablegen.
Die erstellten Zerifikate muss man dann anschließend auf dem Linux Server unter /home/USERNAME ablegen.


'''2. Dovecot 2.0.19 installieren.
'''2. Dovecot 2.0.19 installieren.
Line 35: Line 35:


Die Konfigurierung wird hier [http://wiki2.dovecot.org/FrontPage?action=show&redirect=StartSeite#Dovecot_installation] ausführlich beschrieben.
Die Konfigurierung wird hier [http://wiki2.dovecot.org/FrontPage?action=show&redirect=StartSeite#Dovecot_installation] ausführlich beschrieben.
Self signed-certificates können so [http://wiki2.dovecot.org/SSL/CertificateCreation] generiert werden. Diese sind nicht die selben Zertifikate wie die OSX Server Zertifikate und sollten wie hier [http://wiki2.dovecot.org/SSL/DovecotConfiguration] beschrieben abgelegt werden.
Self signed-certificates können so [http://wiki2.dovecot.org/SSL/CertificateCreation] generiert werden. Diese sind nicht die selben Zertifikate wie die OSX Server Zertifikate und sollten wie hier [http://wiki2.dovecot.org/SSL/DovecotConfiguration] beschrieben, abgelegt werden.


'''4. Dovecot Plugin dovecot-xaps-plugin installieren
'''4. Dovecot Plugin dovecot-xaps-plugin installieren
Line 41: Line 41:


Die Installation läuft relativ problemlos ab. [https://github.com/st3fan/dovecot-xaps-plugin]
Die Installation läuft relativ problemlos ab. [https://github.com/st3fan/dovecot-xaps-plugin]
Wichtig ist hier, dass der Pfad des socks in 95-xaps.conf gesetzt wird. Wir verwenden hier /temp/socks.bla (per chmod schreibar machen!)
Wichtig ist hier, dass der Pfad des Sockets in 95-xaps.conf gesetzt wird. Wir verwenden hier /temp/socks.bla (per chmod schreibar machen!)


'''5. dovecot-xaps-daemon
'''5. dovecot-xaps-daemon
Line 47: Line 47:


Am besten der Anleitung ab [https://github.com/st3fan/dovecot-xaps-daemon#compiling-and-installing-the-daemon] folgen.
Am besten der Anleitung ab [https://github.com/st3fan/dovecot-xaps-daemon#compiling-and-installing-the-daemon] folgen.
Der deamon kann per
Der Deamon kann per
"bin/xapsd -key=$HOME/key.pem -certificate=$HOME/certificate.pem -database=$HOME/xapsd.json -socket=/tmp/xapsd.sock -debug=true"
"bin/xapsd -key=$HOME/key.pem -certificate=$HOME/certificate.pem -database=$HOME/xapsd.json -socket=/tmp/xapsd.sock -debug=true"
gestartet werden.
gestartet werden.
(Das -debug=true sorgt für Fehlermedungen.)
(Das -debug=true sorgt für Fehlermedungen.)


'''6. Gerät einrichten und beim deamon registrieren
'''6. Gerät einrichten und beim Deamon registrieren
'''
'''


Dem iOS Gerät wird nun der Dovecot server per "Mail, Kontakte, Kalender" -> "Account hinzufügen" -> "Andere" -> "Mail-Account hinzufügen" hinzugefügt. Hier werden die Zugangsdaten aus diesem Schritt [http://wiki2.dovecot.org/BasicConfiguration#Authentication] der Dovecot Konfiguration eingetragen.
Dem iOS Gerät wird nun der Dovecot-Server per "Mail, Kontakte, Kalender" -> "Account hinzufügen" -> "Andere" -> "Mail-Account hinzufügen" hinzugefügt. Hier werden die Zugangsdaten aus diesem Schritt [http://wiki2.dovecot.org/BasicConfiguration#Authentication] der Dovecot-Konfiguration eingetragen.
Der xaps-daemon müsste nun eine "REGISTER" Message abgeben und auf dem iOS-Gerät müsste unter "Mail, Kontakte, Kalender" "Datenabgleich" rechts neben dem Server "Push" stehen.
Der xaps-daemon müsste nun eine "REGISTER" Message abgeben und auf dem iOS-Gerät müsste unter "Mail, Kontakte, Kalender" -> "Datenabgleich" rechts neben dem Server "Push" stehen.


'''7. Testen
'''7. Testen
'''
'''


Alle Geräte müssen sich im Netzwerk sehen (Entweder müss der dovecot Server im Netz sein, oder beide Geräte im selben Netzwerk. Der Dovecot Server muss mit dem Internet verbunden sein um Push Notifications an Apple schicken zu können)
Alle Geräte müssen sich im Netzwerk sehen (Entweder muss der Dovecot-Server im Netz, oder beide Geräte im selben Netzwerk sein. Der Dovecot-Server muss mit dem Internet verbunden sein um Push Notifications an Apple schicken zu können).
Per "echo "Hello me" | mail -s "Dovecot test" $USER" wird auf dem Linux eine Mail für den aktuellen Nutzer hinterlegt.
Per "echo "Hello me" | mail -s "Dovecot test" $USER" wird auf dem Linux eine Mail für den aktuellen Nutzer hinterlegt.
In der mail.log müsste folgende Ausgabe sichtbar sein:
In der mail.log müsste folgende Ausgabe sichtbar sein:
Line 82: Line 82:
'''
'''


Der deamon schaut nicht aktiv in der Inbox nach, ob neue Nachrichten eintreffen, sondern muss per LDA [http://wiki2.dovecot.org/LDA] benachrichtigt werden.
Der Deamon schaut nicht aktiv in der Inbox nach, ob neue Nachrichten eintreffen, sondern muss per LDA [http://wiki2.dovecot.org/LDA] benachrichtigt werden.
Dies lässt sich durch einen Workaround [https://github.com/st3fan/dovecot-xaps-plugin/issues/10#issuecomment-145305251] bewerkstelligen.
Dies lässt sich durch einen Workaround [https://github.com/st3fan/dovecot-xaps-plugin/issues/10#issuecomment-145305251] bewerkstelligen.


Line 89: Line 89:
''mailbox_command = /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"''
''mailbox_command = /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"''


Zusätzlich braucht das LDA eine Email Adresse an die alle unzustellbaren Email gehen. In der 15-lda.conf von Dovecot (/etc/dovecot/conf.d/15-lda.conf) muss diese Zeile hinzugefügt werden:
Zusätzlich braucht das LDA eine Email-Adresse an die alle unzustellbaren Emails gehen. In der 15-lda.conf von Dovecot (/etc/dovecot/conf.d/15-lda.conf) muss diese Zeile hinzugefügt werden:


postmaster_adress = bla@blubb.de
postmaster_adress = bla@blubb.de
Line 98: Line 98:
'''
'''


dovecot-lda benötigt irgendwo Administrator Rechte um in /var/mail schreiben zu können. Das Problem konnte ich leider nicht lösen und habe einfach per "chmod -R 777 /var/mail" den Ordner für alle schreibbar gemacht. Dies ist natürlich keine production-ready Lösung, reichte aber für unseren proof-of-concept.
dovecot-lda benötigt irgendwo Administrator Rechte um in /var/mail schreiben zu können. Das Problem konnten wir leider nicht lösen und haben einfach per "chmod -R 777 /var/mail" den Ordner für alle schreibbar gemacht. Dies ist natürlich keine production-ready Lösung, reichte aber für unser proof-of-concept.

Revision as of 11:29, 29 October 2015

Email-Push-Notifikation für iOS mit dovecot

Die Idee ist, dass Emails nicht mehr in einem bestimmtem Zeitintervall abgefragt werden, sondern über die bestehende Push-Verbindung zwischen dem iOS Gerät und Apple eine Benachrichtigung gesendet wird. Diese Verbindung ist konstant und alle Benachrichtigungen kommen sofort an. Es wird ein Linux Server verwendet, auf welchem Dovecot läuft. Die Push-Notifications werden über das Dovecot-plugin dovecot-xaps-plugin [1] ausgelößt und über den Deamon dovecot-xaps-daemon [2] versendet.


Anleitung:

Für diese Anleitung wird ein Linux Server mit Ubuntu 12.04.5 empfohlen. Unter Ubuntu 15.04 ließ es sich nicht zum Laufen bringen.

1. OSX Server Certificates abgreifen

Als erstes muss man sich einen OSX Server für 20€ besorgen. Dafür benötigt man eine Apple ID. Mit der folgenden Anleitung [3] erfährt man, wie man an die benötigten Zertifikate gelangt. Der Abschnitt "Locate the right certificate by expanding those whose name start with APSP: and then look for the certificate with a private key that is named com.apple.servermgrd.apns.mail" bedeutet, dass das Zertifikat und der Key beide gleichzeitig sichbar sein müssen. Danach müssen beide per ctrl markiert und können dann erst als p12 exportiert werden. Die erstellten Zerifikate muss man dann anschließend auf dem Linux Server unter /home/USERNAME ablegen.

2. Dovecot 2.0.19 installieren.

Das Plugin funktioniert nur mit der Dovecot Version 2.0.19. Diese sollte nicht aus den sources heraus installiert werden, sondern aus dem prebuild package. Falls Ubuntu 12.04.5 installiert wurde geht dies über:

sudo apt-get build-dep dovecot-core

sudo apt-get install git dovecot-dev

(sudo apt-get install dovecot-imapd dovecot-pop3d)

Dies hat auch den Vorteil, dass alle Nutzer (doveuser und dovenull) erstellt und alle Rechte richtig gesetzt werden.

3. Dovecot konfigurieren

Die Konfigurierung wird hier [4] ausführlich beschrieben. Self signed-certificates können so [5] generiert werden. Diese sind nicht die selben Zertifikate wie die OSX Server Zertifikate und sollten wie hier [6] beschrieben, abgelegt werden.

4. Dovecot Plugin dovecot-xaps-plugin installieren

Die Installation läuft relativ problemlos ab. [7] Wichtig ist hier, dass der Pfad des Sockets in 95-xaps.conf gesetzt wird. Wir verwenden hier /temp/socks.bla (per chmod schreibar machen!)

5. dovecot-xaps-daemon

Am besten der Anleitung ab [8] folgen. Der Deamon kann per "bin/xapsd -key=$HOME/key.pem -certificate=$HOME/certificate.pem -database=$HOME/xapsd.json -socket=/tmp/xapsd.sock -debug=true" gestartet werden. (Das -debug=true sorgt für Fehlermedungen.)

6. Gerät einrichten und beim Deamon registrieren

Dem iOS Gerät wird nun der Dovecot-Server per "Mail, Kontakte, Kalender" -> "Account hinzufügen" -> "Andere" -> "Mail-Account hinzufügen" hinzugefügt. Hier werden die Zugangsdaten aus diesem Schritt [9] der Dovecot-Konfiguration eingetragen. Der xaps-daemon müsste nun eine "REGISTER" Message abgeben und auf dem iOS-Gerät müsste unter "Mail, Kontakte, Kalender" -> "Datenabgleich" rechts neben dem Server "Push" stehen.

7. Testen

Alle Geräte müssen sich im Netzwerk sehen (Entweder muss der Dovecot-Server im Netz, oder beide Geräte im selben Netzwerk sein. Der Dovecot-Server muss mit dem Internet verbunden sein um Push Notifications an Apple schicken zu können). Per "echo "Hello me" | mail -s "Dovecot test" $USER" wird auf dem Linux eine Mail für den aktuellen Nutzer hinterlegt. In der mail.log müsste folgende Ausgabe sichtbar sein:

Oct 7 15:15:28 immi-VirtualBox dovecot: lda(immi): Debug: xaps_plugin_init

Oct 7 15:15:28 immi-VirtualBox dovecot: lda(immi): Debug: xaps_transaction_begin

Oct 7 15:15:28 immi-VirtualBox dovecot: lda(immi): Debug: xaps_transaction_begin

Oct 7 15:15:28 immi-VirtualBox dovecot: lda(immi): Debug: xaps_save_finish

Oct 7 15:15:28 immi-VirtualBox dovecot: lda(immi): Debug: xaps_transaction_commit

Oct 7 15:15:28 immi-VirtualBox dovecot: lda(immi): msgid=<20151007131528.8E6334DC5C@immi-VirtualBox>: saved mail to INBOX

Oct 7 15:15:28 immi-VirtualBox dovecot: lda(immi): Debug: xaps_plugin_deinit

8. Falls das nicht der Fall ist

Der Deamon schaut nicht aktiv in der Inbox nach, ob neue Nachrichten eintreffen, sondern muss per LDA [10] benachrichtigt werden. Dies lässt sich durch einen Workaround [11] bewerkstelligen.

In der /etc/postfix/main.cf muss folgende Zeile hinzugefügt werden:

mailbox_command = /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"

Zusätzlich braucht das LDA eine Email-Adresse an die alle unzustellbaren Emails gehen. In der 15-lda.conf von Dovecot (/etc/dovecot/conf.d/15-lda.conf) muss diese Zeile hinzugefügt werden:

postmaster_adress = bla@blubb.de

Per "sudo doveadm reload" wird die neue Konfiguration geladen. Schritt 7 wiederholen.

9. Falls im mail.log ein permission error ausgegeben wird

dovecot-lda benötigt irgendwo Administrator Rechte um in /var/mail schreiben zu können. Das Problem konnten wir leider nicht lösen und haben einfach per "chmod -R 777 /var/mail" den Ordner für alle schreibbar gemacht. Dies ist natürlich keine production-ready Lösung, reichte aber für unser proof-of-concept.