Debian: z-push mit IMAP und nginx einrichten

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-imapCode-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-pushCode-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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert