z-push erlaubt dir, deinen Mail-Server mit ActiveSync-Funktionen zu erweitern, um beispielsweise Push-Benachrichtigungen unter Apples iOS zu unterstützen. Dadurch erhältst du früher Informationen über neue E-Mails auf deinem iPhone oder iPad. Da ich keine vollständige Anleitung finden konnte, wie du z-push in dein bereits bestehendes System mit Mail-Server und nginx einrichten kannst, habe ich mich dazu entschieden, selbst eine zu erstellen.
Sie wird sowohl ein funktionierendes ActiveSync bereitstellen als auch eine Autodiscover-Funktion, sodass du nicht mehr als E-Mail-Adresse und Passwort eingeben musst, um dein E-Mail-Konto auf deinem Gerät zu konfigurieren.
All das habe ich auf einem iPhone getestet.
Installation von z-push
Zuerst musst du z-push installieren. Um dies zu tun, musst du folgenden Befehl ausführen:
apt install z-push-backend-imap
Code-Sprache: Bash (bash)
Dieser wird auch das Paket z-push-common
mit allen erforderlichen Dateien installieren.
Standardmäßig werden die Daten ins Verzeichnis /usr/share/z-push
installiert und die Konfigurationsdateien ins Verzeichnis /etc/z-push
.
Optional: Datei-Eigentümer ändern, um dem PHP-Benutzer zu entsprechen
Standardmäßig gehören alle Dateien und Ordner innerhalb /usr/share/z-push
dem Benutzer www-data
, der auch der Standard-Benutzer ist, um PHP-Skripte auszuführen. Wenn dein System einen anderen PHP-Benutzer verwendet, musst du die Berechtigungen für dieses Verzeichnis sowie die Bibliotheks- und Log-Verzeichnisse anpassen:
chown -R myuser:myuser /usr/share/z-push
chown -R myuser:myuser /var/lib/z-push
chown -R myuser:myuser /var/log/z-push
Code-Sprache: Bash (bash)
Andernfalls können auf erforderliche Dateien von PHP nicht zugegriffen oder beschrieben werden.
Log-Rotation anpassen
Ebenfalls muss die Konfigurationsdatei für die Log-Rotation unter /etc/logrotate.d/z-push-common
angepasst werden, damit diese die Dateien unter dem korrekten Benutzer erstellt.
/var/log/z-push/*.log {
weekly
missingok
rotate 4
compress
notifempty
create 0644 www-data www-data
}
Code-Sprache: JavaScript (javascript)
Dort, wo www-data
steht, muss jeweils der korrekte Benutzer hinterlegt werden.
Konfiguration
Jetzt musst du z-push konfigurieren, damit es mit deinem Mail-Server kommunizieren kann.
In den Konfigurationsdateien gibt es wesentlich mehr zu konfigurieren, was in dieser Anleitung jedoch nicht gezeigt wird, da es nicht erforderlich ist, damit z-push funktioniert. Verändere diese zusätzlichen Einstellungen wie du möchtest. Aber tu das am besten, nachdem du dieser Anleitung gefolgt bist.
Autodiscover
Bearbeite zuerst die Datei etc/z-push/autodiscover.conf.php
.
Gib die Zeitzone in der Zeile define('TIMEZONE', '');
an und gib BackendIMAP
als dein Backend-Datenanbieter: define('BACKEND_PROVIDER', 'BackendIMAP');
IMAP
Bearbeite nun die Datei /etc/z-push/imap.conf.php
und definiere deinen IMAP_SERVER
, wenn er nicht auf demselben Gerät läuft. Ebenso den IMAP_PORT
. Standardmäßig zeigen diese Werte auf localhost:443
, was bei mir passt.
Der wichtigste Bereich ist, die Einstellung IMAP_FOLDER_CONFIGURED
auf true
zu setzen. Andernfalls funktioniert nichts (wie du auch im Kommentar darüber lesen kannst).
Schau dir die nachfolgenden Einstellungen zu den Ordnernamen an. Je nach Mail-Server-Konfiguration musst du diese Werte verändern. Ich beispielsweise musste IMAP_FOLDER_SENT
auf Sent Messages
und IMAP_FOLDER_TRASH
auf Deleted Messages
setzen. Andernfalls waren meine gesendeten Nachrichten verloren und gelöschte Nachrichten waren nicht vom Server gelöscht und nach wie vor via IMAP erreichbar.
Setze IMAP_SMTP_METHOD
auf smtp
, um deinen SMTP-Server zu verwenden, um E-Mails zu versenden. Setze darunter deine $imap_smtp_params
korrekt. In meinem Fall sehen sie wie folgt aus:
$imap_smtp_params = array('host' => 'tcp://mail.kittmedia.com', 'port' => 587, 'auth' => true, 'username' => 'imap_username', 'password' => 'imap_password');
Code-Sprache: PHP (php)
Wenn du Port 25
oder 587
verwendest, muss der Host mit dem Präfix tcp://
beginnen. Wenn du Port 465
verwendest, musst du ihn auf ssl://
setzen.
z-push
Konfiguriere als letzten Schritt dieser Anleitung die Datei /etc/z-push/z-push.conf.php
und setze die Werte identisch wie bei den Autodiscover-Einstellungen.
nginx-Konfiguration
Du benötigst ein funktionierendes SSL-/TLS-Zertifikat für die Subdomain autodiscover.domail.tld
, damit Autodiscover funktioniert.
Du hast möglicherweise bereits eine funktionierende vHost-Konfiguration für diese Subdomain. Falls nicht, nimm diese:
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
##
# General settings
##
server_name autodiscover.domain.tld;
access_log /var/log/nginx/autodiscover.domain.tld-access.log;
error_log /var/log/nginx/autodiscover.domain.tld-error.log;
location ~* /AutoDiscover/AutoDiscover.xml {
alias /usr/share/z-push/autodiscover/autodiscover.php;
include /etc/nginx/fastcgi.conf;
fastcgi_read_timeout 3660;
fastcgi_pass 127.0.0.1:9000;
}
location ~* /Microsoft-Server-ActiveSync {
alias /usr/share/z-push/index.php;
include /etc/nginx/fastcgi.conf;
fastcgi_read_timeout 3660;
fastcgi_pass 127.0.0.1:9000;
}
##
# SSL
##
location /.well-known/acme-challenge {
root /var/www/letsencrypt;
auth_basic off;
types { }
default_type text/plain;
}
ssl_certificate /etc/letsencrypt/live/autodiscover.domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/autodiscover.domain.tld/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/autodiscover.domain.tld/fullchain.pem;
}
Code-Sprache: Nginx (nginx)
Hier musst du alle autodiscover.domain.tld
mit deiner korrekten Domain ersetzen und den Wert von fastcgi_pass
, durch den PHP-Anfragen verarbeitet werden.
Zusätzlich, sofern du noch kein TLS-Zertifikat via Let’s Encrypt erstellt hast, kommentiere die letzten drei Zeilen des SSL-Bereichs aus (Zeilen 41–43). Hole dir dann das Zertifikat und entferne die Kommentarzeichen bei diesen Zeilen wieder.
Stelle sicher, dass du jedes Mal die Konfiguration nach einer Änderung neu lädst (nginx -t && systemctl reload nginx
).
Stelle außerdem sicher, dass autodiscover.domain.tld
via DNS auf deinen Server zeigt.
Fazit
Es sind nicht viele Schritte, um z-push mit funktionierendem Autodiscover einzurichten, dank der super Arbeit der z-push-Maintainer. Ich war verwirrt, dass ich keine vollständige Anleitung dafür finden konnte, insbesondere für den nginx-Teil, da viele mit diesem Probleme zu haben scheinen. Ich hoffe, diese Zeit ist nun vorbei. Wenn du dennoch Probleme mit der Einrichtung von z-push in dieser Konstellation hast, benutze einfach den Kommentarbereich unten.