日記+コメント付きブックマーク+他人にも役に立つかもしれない情報など。
(更新情報: RSS(ツッコミ付き) / RSS(ツッコミ抜き) / LIRS)
- p (01/03)
- Thiramil (10/26)
- 久々にいまむらを食べたい通りすがり (09/28)
- Fluxadir (05/16)
- Antiprestin (11/08)
2016/01/03 編集
_ [システム運用][Mail] Ubuntu で運用中の独自ドメインのメールを d-push で iPhone にプッシュ通知する
自分は iPhone で独自ドメインのメアドを利用すべく、さくらの VPS に Ubuntu Server を立てて IMAP サーバーを稼働させてきていたのだけど、単純に IMAP サーバーを立てるだけだと iPhone にプッシュ通知できず、最短15分毎のフェッチとなってしまう。
調べたところ、iPhone にプッシュ通知できる OSS 実装があることを知ったので、Ubuntu で運用中のサーバーに導入してみた。
なお、導入にあたっては基本的に「自宅サーバのeximから,iPhoneにpush通知はできるのか.できた! exim+dovecot+z-push - なぜか数学者にはワイン好きが多い」を参考とさせていただいた。
今回の前提環境
- Ubuntu 14.04 LTS で MTA として postfix、MRA として dovecot を構築済み
- dovecot ではこれまで IMAP を利用してきた
- apache2 がインストール済みだが、SSL は有効化していない
- サーバー証明書はオレオレ証明書で良いものとする
必要なパッケージのインストール
まず、iPhone でメールのプッシュ通知を利用するには Microsoft ActiveSync 互換環境が必要で、その OSS 実装が Z-Push であるらしい。
また、Z-Push は Ubuntu では (というか Debian では) d-push というパッケージで提供されていた。
であれば話は簡単なので、
apt-get install d-push
である。
依存関係により libc-client2007e、mlock、php5、php5-imap、php-auth-sasl、php-mail、php-net-smtp、php-net-socket、php-pear もインストールされた。
(簡単なドキュメントが /usr/share/doc/d-push/README.Debian.gz に配置されるので、それも参照)
apache2 での SSL と D-Push 有効化
mod_ssl 有効化
a2enmod ssl
SSL サイト有効化
a2ensite default-ssl
d-push 有効化
cp -a /etc/d-push/apache.conf /etc/apache2/conf-available/d-push.conf a2enconf d-push
ブラウザで確認
https://www.example.com/Microsoft-Server-ActiveSync にアクセスし、ユーザー名/パスワードを入力すると
GET not supported
This is the d-push location and can only be accessed by Microsoft ActiveSync-capable devices
と表示されることを期待するが、実際には
FatalException
BackendIMAP(): php-imap module is not installed
と表示されてしまう。
php5-imap はインストールしただけでは有効にならないのであった。この問題は
php5enmod imap
することで解決。
iPhone 側での設定
[設定] → [メール/連絡先/カレンダー] → [アカウントを追加] → [Exchange]
メール | メールアドレス |
---|---|
パスワード | IMAP パスワード |
説明 | 適当にわかりやすいものを |
で、[次へ]
メール | (変更なし) |
---|---|
サーバ | D-Push をインストールしたサーバー |
ドメイン | (空) |
ユーザ名 | IMAP ユーザー名 |
パスワード | (変更なし) |
で、[次へ]
「メール」にのみチェックを入れ他は外し、[保存]
d-push.conf の修正 (PROVISIONING 無効化)
設定完了後、メールアプリを開くと「メールを取得できません」「サーバへの接続に失敗しました。」との表示。
この時 /var/log/d-push/d-push.log には
ProvisioningRequiredException: Retry after sending a PROVISION command - code: 0
と出力されていた。
この問題については、/etc/d-push/d-push.conf 中の
define('PROVISIONING', true);
を
define('PROVISIONING', false);
に変更することで解決。
d-push.conf の修正 (タイムゾーン)
デフォルト設定では /var/log/d-push/ 配下の各ログファイルのタイムスタンプが GMT で出力されてしまう。
この問題については、/etc/d-push/d-push.conf 中の
define('TIMEZONE', '');
を
define('TIMEZONE', 'Asia/Tokyo');
に変更することで解決。
送信済みメールフォルダ名の修正
d-push を導入しただけでは送信したメールが保存されない。(IMAP 利用時に作られていた「Sent Messages」フォルダがあるが、そこには入らない)
この時 /var/log/d-push/d-push.log には
[ERROR] [mobile] BackendIMAP->SendMail(): The email could not be saved to Sent Items folder. Check your configuration.
と出力されている。
デフォルトの送信済みメール保存フォルダは「Sent」のようなので、Maildir 配下の .Sent Messages を .Sent にリネームすることで解決。
未解決の課題
設定完了後の初回同期時等、メールアプリ起動時等に「メールを取得できません」「サーバへの接続に失敗しました。」と表示されてしまう場合があった。
この時 /var/log/d-push/d-push.log には
Mobile loop detected! Messages sent to the mobile will be restricted to 1 items in order to identify the conflict
や
/usr/share/d-push/backend/imap.php:718 strpos(): Empty needle (2)
といった警告が表示されている。
これらの問題については原因不明のまま事象が起きなくなった。
その他参考
携帯キャリア以外の ISP でも OCN は ActiveSync に対応しているらしく、設定案内ページが掲載されていた。
その他 iPhoneデータ連携(1) ActiveSync互換 OSS z-push を入れてみた - とあるエンジニアの日常も参考になりそうだ。