iPhone でメールをプッシュ通知する
iOS の Mail.app でメールをプッシュ通知する方法としては、主に 2つあります。
- Apple Push Notification Service に対応しているメールサーバを使う
- Microsoft Exchange Server を使う
前者は、Apple のプッシュ通知インフラを使う方法で、まあ、色々と利点はあるのでしょう。しかし、Apple から証明書を取得/更新する必要があります。Apple Developer Membership は一部の例外を除いて有料(年間 $99〜)のため、メールのプッシュ通知のためだけに支払うのはさすがにキツイです。後者は Microsoft Exchange Server クローンの z-push をインストールすることで利用できるので、前者に比べると設定がはるかに楽です。
レポジトリの追加とインストール
z-push の公式ドキュメント(英語)でレポジトリを使え、とあるので、それに従います。
/etc/yum.repos.d/z-push.repo を作成し、以下の内容を書き込みます。
[z-push] name=Z-Push noarch Enterprise Linux 7 - $basearch baseurl=https://download.kopano.io/zhub/z-push:/final/RHEL_7 failovermethod=priority enabled=1 gpgcheck=0
インストールします。
$ sudo yum install z-push-common z-push-config-nginx z-push-backend-imap z-push-ipc-sharedmemory $
各 RPM パッケージの中身は以下のとおりです。基本は上記でよいと思いますが、各自、適切なものを選択してください。
z-push-commonは z-push 本体です。z-push-config-nginxは nginx で z-push を使う場合の設定ファイル一式です。Apache を使いたい場合は、代わりにz-push-config-apacheを使用してください。z-push-backend-imapは IMAP サーバと通信するためのプラグインです。他にも、z-push-backend-caldavなど、色々と用意されているようです。各自調べてください。z-push-ipc-sharedmemoryは z-push でプロセス間通信(IPC)をする際に必要になるもので、これを入れないと、大量のエラーログが出ます。負荷分散で複数サーバにまたがる場合は、z-push-ipc-memcachedも用意されていますので、適切な方をインストールしてください。
z-push の設定
/etc/z-push/z-push.conf.php の以下の箇所を編集します。
// Defines the default time zone, change e.g. to "Europe/London" if necessary
define('TIMEZONE', 'Asia/Tokyo');
設定箇所はタイムゾーンのみで、他は設定不要です。ネットでは、BACKEND_PROVIDER を設定する例をよく見かけますが、空文字列のままにしておくと、自動認識※となります。IPC_PROVIDER も空文字列のままにしておくと、使える方を自動認識して使ってくれます。特別な事情な無い限り、明示的に設定する必要はありません。
Leave this value empty and Z-Push will autoload a backend.
/etc/z-push/imap.conf.php の以下の箇所を各自の環境に合わせて編集します。
// Defines the server to which we want to connect
define('IMAP_SERVER', 'localhost');
// connecting to default port (143)
define('IMAP_PORT', 143);
define('IMAP_PORT', 993);
// best cross-platform compatibility (see http://php.net/imap_open for options)
define('IMAP_OPTIONS', '/notls/norsh');
define('IMAP_OPTIONS', '/ssl/validate-cert');
// Since I know you won't configure this, I will raise an error unless you do.
// When configured set this to true to remove the error
define('IMAP_FOLDER_CONFIGURED', false);
define('IMAP_FOLDER_CONFIGURED', true);
// '@mydomain.com' - the username is used and the given string will be appended
define('IMAP_DEFAULTFROM', '@example.com');
// smtp => direct connection against SMTP
define('IMAP_SMTP_METHOD', 'mail');
define('IMAP_SMTP_METHOD', 'smtp');
ここはお好みで、としか言いようがないです。
nginx の設定
nginx の設定例です。
...
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mail.example.com;
root /path/to/htdocs;
# If you're using PHP-FPM uncomment the following lines.
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param REQUEST_URI $1;
fastcgi_param PHP_FLAG "magic_quotes_gpc=off \n register_globals=off \n magic_quotes_runtime=off \n short_open_tag=on";
fastcgi_param HTTP_PROXY ""; # Mitigate https://httpoxy.org/ vulnerabilities
fastcgi_read_timeout 3660; # Z-Push Ping might run 3600s, but to be safe
location /Microsoft-Server-ActiveSync {
alias /usr/share/z-push/index.php;
access_log /var/log/nginx/z-push-access.log;
error_log /var/log/nginx/z-push-error.log;
# Attachments ca 15MB max (since binary data needs to be base64 encoded in mine, which results in in about 33% overhead)
client_max_body_size 20m;
client_body_buffer_size 128k;
# Select one of the fastcgi_pass values or adapt to your configuration
include snippets/z-push-php.conf;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
}
location / {
...
テスト
https://mail.example.com/Microsoft-Server-ActiveSync にアクセスします。認証を求められますので、IMAP のアカウントとパスワードでログインします。無事、ログインできればインストール成功です。
iPhone の設定
iPhone の OS は iOS 14.6 です。
- 設定 → メール → アカウント → アカウントを追加 → Microsoft Exchange
- メール: (メールアドレス), 説明: (お好みで) を入力
- 次へを押して、手動構成を選択
- パスワード: (パスワード)を入力
- サーバ: mail.example.com, ドメイン: example.com, ユーザ名: (ユーザ名) を入力
- コンテンツを選択。メモとかカレンダーとかも出ますが、メール以外が使えるかどうかは試していません。
これだけだと、メールはプッシュ通知されていますが、ユーザへの通知はありません。別途、通知の設定を行います。
- 設定 → メール → 通知 → (上で作ったやつ)
- 通知のところに、ロック画面、通知センター、バナーなど選択肢があるので、各自お好みで。
- サウンドやバッチもお好みで。
おわりに
まだ書きかけです。
ネットでは、z-push の設定に関する情報はたくさん見つかるのですが、レポジトリからインストールする方法については見かけなかったので、この記事を作成しました。レポジトリからインストールして、常に最新のものを使いましょう。
紹介しておいてアレですが、今後も z-push を使い続けることは、やや不安が残ります。z-push が依存している php-imap、 php-awl、そして libc-client は今後も使い続けられるのでしょうか? php-imap が使用している libc-client(University of Washington c-client library)は 2007年を最後に更新が途絶えています。php-awl(Andrew's Web Libraries)はかなりマイナーなソフトで、z-push の RHEL7 用のレポジトリでは配布しているものの、RHEL8 用のレポジトリでは配布なしというチグハグさです。そろそろ PHP は止めて、Python あたりで書き直してもらえるといいですが…。