Push Mail, Z-Push: czyli ActiveSync dla biednych (PHP jako CGI)

P

Z-Push

Nastały ciekawe czasy. Co trzeci, sprzedany w 2011 roku, telefon to smartphone. Ludzie chcą sprawdzać maile na telefonie, surfować po internecie i w ogóle robić dziwne rzeczy, których wcześniej nie mogli robić będąc poza domem. Google Mail oraz inne duże portale mailowe wspierają ActiveSync, ale co jeśli w swoim prywatnym grajdole też chcemy mieć fancy push maila zamiast co jakiś czas sprawdzać czy dostaliśmy maila (czy to automatycznie czy ręcznie). Można kupić ActiveSync i postawić serwer na Windowsie. Można też skorzystać z Z-Push, darmowej implementacji ActiveSync w PHP.

Konfiguracja

Jeśli mamy PHP odpalone jako moduł Apache, to skonfigurowanie stabilnej wersji Z-Push 1.5.7 sprowadza się do edycji pliku config.php. Jeśli natomiast, tak jak ja, mamy PHP jako CGI, to rzeźby jest troszkę więcej.

Na początek trzeba w .htaccess przesłać do PHP zmienną HTTP_AUTHORIZATION:

RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

Następnie musimy nauczyć PHP funkcji apache_request_headers() (ta funkcja jest dostępna w PHP jako moduł), ja dopisałem do index.php:

if (!function_exists('apache_request_headers')) {
function apache_request_headers() {
$header = array();
$header['Ms-Asprotocolversion'] = $_SERVER['HTTP_MS_ASPROTOCOLVERSION'];
$header['X-Ms-Policykey'] = $_SERVER['HTTP_X_MS_POLICYKEY'];
$header['User-Agent'] = $_SERVER['HTTP_USER_AGENT'];

return $header;
}

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
}

Następnie edytujemy config.php i ustawiamy backend na BackendIMAP i odpowiedni port. Jeśli chcemy możemy tam ustawić jeszcze parę opcji.

Kolejna bardzo ważna rzecz, to ustawienie aliasów w konfiguracji Apache:

Alias /Microsoft-Server-ActiveSync /path/to/z-push/index.php

Aby sprawdzić czy wszystko działa wchodzimy na adres http://mojadomena/Microsoft-Server-ActiveSync. Powinno spytać nas o login i hasło. Podajemy nasze dane do poczty. Jeśli wszystko jest ok, powinno nas wpuścić i napisać gdzieś na grubo: GET not supported. Znaczy, że działa.

Teraz można już skonfigurować smartphone’a by korzystał z Microsoft Exchange i wpisać dane swojego serwera mailowego. Testowałem na iPhone 4s i Samsung Galaxy S – na obu urządzeniach nie było problemów.

Możliwe jest włączenie autodetekcji ustawień serwera. Nie różni się to w przypadku PHP jako CGI niczym jak w przypadku modułu, dlatego nie będę o tym pisał. Zaciekawionych zachęcam do poszperania w Google. Ułatwia to mniej obeznanym użytkownikom konfigurację, ponieważ wypełnia pole serwera automatycznie.

Bijcie!

About the author

Bartosz

iOS and OS X software engineer. Currently working in Berlin, Germany.

2 comments

By Bartosz