Z-Push 2.4系をインストール

Z-Push

以前にも書いたZ-Push。今年の2月でVer.1.0リリースから10年経つそうな。
今年に入って(α版は昨年10月から)Z-Pushはいよいよ2.4系になったんだけど、これがどういう理由かは知らないがtarballでは配布されなくて、どうしようかと二の足を踏んでいる人もいるかも。PHP7.2対応は一応2.4.3からということになっているので2.4系の最新版(2018年8月20日現在の最新版は2.4.4)にした方が良いとは思うけど。

2.4系のインストール

基本的には2.3系と変わらないのでtarballの入手がカギかな。
http://repo.z-hub.io/z-push:/final/ にアクセスして左列の /repo.z-hub.io/z-push/final/Debian_9.0 あたりを開く。 z-push_x_x_x+x.orig.tar.gz というファイルがあるのでそれをダウンロードする。このファイルは Debian 以外の Linux でも xBSD でも使える筈。

# tar zxvf z-push_x_x_x+x.orig.tar.gz           #解凍されてpush_x_x_x+xというディレクトリができる
# cd z-push_x_x_x+x
# cp -R src /Z-Pushのドキュメントルートpath/        #コピー先でsrcというディレクトリ名を使う必要はない
# chown -R www:www /Z-Pushのドキュメントルートpath  #ウェブ系のオーナーに変更
# mkdir /var/spool/z-push                        #FreeBSDなら/var/spool以下がよさ気かなと
# chown www:www /var/spool/z-push

ちなみに同階層のconfigディレクトリにはウェブサーバのApache, Lighttpd, Nginx用の設定ファイルの雛形もあるので設定に悩んでいるなら参照する。

設定も以前と殆ど変わらない。(けど、今回の方が少し詳しく)

/Z-Pushのドキュメントルートpath/config.php (変更分)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
    define('TIMEZONE', 'Asia/Tokyo');          //日本時間
    define('USE_FULLEMAIL_FOR_LOGIN', true);   //メールアカウントがメールアドレスそのものならtrue, @の前の部分だけならfalse
    define('STATE_DIR', '/var/spool/z-push/'); //FreeBSDなどはこちらの方が無難かと
    define('LOGBACKEND', 'filelog');           //ログは専用ファイルに録る
// define('LOGLEVEL', LOGLEVEL_INFO);          //インフォレベル
     define('LOGLEVEL', LOGLEVEL_ERROR);       //エラーレベル     今回はこれ
// define('LOGLEVEL', LOGLEVEL_DEBUG);         //デバッグレベル
//  define('LOGAUTHFAIL', false);              //試験時は下を有効に、運用時はこちらを有効に
    define('LOGAUTHFAIL', true);               //認証失敗のログを取る 運用時はこの行を無効化する
    define('LOGFILEDIR', '/var/log/');      //FreeBSDなどはこちらの方が無難かと。
    define('LOGFILE', LOGFILEDIR . 'z-push.log');  //  /var/log/z-push.log ファイルを別途手動作成する
    define('LOGERRORFILE', LOGFILEDIR . 'z-push-error.log');  //  /var/log/z-push-error.log  ファイルを別途手動作成する

    define('PROVISIONING', false);             //以下2行は環境によるかも
    define('LOOSE_PROVISIONING', true);

    define('BACKEND_PROVIDER', 'BackendIMAP'); // IMAPバックエンドを使用する    一番重要
他の設定は初期値で問題ないはず。前回はログ置き場を/var/log/z-push以下としたが、FreeBSDなら/var/logの方が良さそうかと思って変更した。
/Z-Pushのドキュメントルートpath/backend/imap/config.php (変更分)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
define('IMAP_SERVER', 'mx.example.com');    //Z-pushとMTAが同一ホストならlocalhostでも良いけど、なるべくFQDN
define('IMAP_PORT', 993);                //IMAPサーバにSSL/TLSポートで接続なら993, 非SSL/TLSポートなら143
//define('IMAP_OPTIONS', '/notls/norsh');    //IMAPサーバに 非SSL/TLSポートで接続ならこちらの行
define('IMAP_OPTIONS', '/ssl/novalidate-cert');  //IMAPサーバにSSL/TLSポートで接続ならこちらの行

define('IMAP_FOLDER_CONFIGURED', true);          //基本的に必ずtrueに変更する

define('IMAP_FOLDER_PREFIX', '');                //以下8行はIMAPフォルダの設定
define('IMAP_FOLDER_PREFIX_IN_INBOX', false);
define('IMAP_FOLDER_INBOX', 'INBOX');
define('IMAP_FOLDER_SENT', 'INBOX.Sent');
define('IMAP_FOLDER_DRAFT', 'INBOX.Drafts');
define('IMAP_FOLDER_TRASH', 'INBOX.Trash');
define('IMAP_FOLDER_SPAM', 'INBOX.Spam');
define('IMAP_FOLDER_ARCHIVE', '');              //うちでは使わないので指定なしだが、使うなら変更して
// forward messages inline (default true - inlined)
define('IMAP_INLINE_FORWARD', true);

//define('IMAP_SMTP_METHOD', 'mail');    //以下2行はメールの送信方法の選択
define('IMAP_SMTP_METHOD', 'smtp');          //送信はこちらを使うのが普通かと

global $imap_smtp_params;                 //次行はメール送信用のパラメータ
$imap_smtp_params = array('host' => 'ssl://mx.example.com', 'port' => 465, 'auth' => true, 'username' => 'imap_username', 'password' => 'imap_password', 'localhost' => 'mx.example.net');

IMAPフォルダの設定は上の設定例がおそらくCourier-IMAPとDovecotで使える筈。その他のIMAPサーバではそのまま使わないこと。
最後のメール送信用のパラメータはメールサーバでメール送信をするための設定一式が入る。上の例では送信にメールサーバのSSLポート465を使う。非SSLならおそらくサブミッションポートは587辺りが一般的かと。
上の例ではlocalhostとしてmx.example.comを指定しているが、これはheloで名乗るホスト名。デフォルトはlocalhostを名乗るようだが、これはMTAが弾いてメールを送信されて貰えない可能性がある(MTAの設定次第)。そこで、MTA自身のホスト名を名乗るようにした。MTAがlocalhostを名乗る送信者を弾かないのであれば 'localhost' => 'mx.example.net' の部分はは要らない。逆に、もっと違うホスト名を名乗らないと弾かれる場合は適切に指定する。

動作確認

https://sync.example.com/Microsoft-Server-ActiveSync にブラウザでアクセスする。
認証はIMAPサーバ,SMTPで使用するメールアカウントの1つとそのパスワード。認証後、何か間違っている部分があるとメッセージが表示されるので変更する。GET not supportedはどうでも良い。

メールクライアント(MUA)

GmailアプリでExchangeアカウントを作成する。登録するのはIMAPサーバ, SMTPで使用するアカウントとメールサーバの情報。
以下、Exchangeアカウント登録後にすること。

Gmailアカウントの変更 1
Gmailアプリのアカウント選択から「アカウントを管理する」でも良いが、わかり難いらしいのでAndroidの設定メニューから「ユーザーとアカウアント」を開き、登録したExchangeアカウントをクリック。「アカウントを同期」を同期長押しする。カレンダーと連絡先のスイッチをオフにする。

Gmailアカウントの変更 2
Gmailアプリで(登録済みの)Exchangeアカウントを選択。メニューから「設定」を開く。
「同期頻度」を「自動」(プッシュ)に変更する。自動以外は一定時間毎のメール着信確認になるのでZ-Pushを導入する意味がない。電話機の電池持ちが悪くなるかもしれない旨のメッセージが出るかもしれないが、無視する。

上で設定したメールアドレス宛にメールを送信して通知されること、メールが表示されること、IMAPメールフォルダが表示されること、IMAPメールフォルダ内のメールを閲覧できることを確認。
送られたメールに返信し。相手に返信が届けばOK

関連記事: