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', '
ここはお好みで、としか言いようがないです。
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 あたりで書き直してもらえるといいですが…。