Windows 10のメールでZ-Push (Exchange)を利用する

前回、Exchangeメールを提供するためのZ-Pushを最新版にしたのでWindows 10の「メール」でも動作確認してみる。そのために空いているPCにWindows 10をインストールするのに時間がかかってイライラ。今回はWindows Updateはしてないけど、もしもそれもやってたら時間かかりすぎて投げ捨ててたかも。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 1
Windows 10 の「メール」を起動する。
左列の「アカウント」をクリック。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 2
右列の「アカウントを追加」をクリック。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 3
「Exchange」をクリックする。この記事の目的だから当然だよね。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 4
Z-Pushで利用できるメールアドレスを入力して「次へ」をクリック。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 5
「メールアドレス」とその「パスワード」を入力し「サインイン」をクリック。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 6
当然だけど、「入力した内容は間違っている」という扱いになるので再入力を求められる。
ここでユーザー名としてメールのアカウント(ID)を入力しても速攻で忘れられるというMicrosoftらしいよくわからない仕様。「サインイン」をクリック。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 7
「入力した内容は間違っている」という扱いがエスカレートして「エラー」扱いになる。
ここで、「詳細」をクリックする。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 8
ようやく「サーバー」を入力する欄が現れる。MSの嫌がらせが酷すぎる。
ユーザー名(メールのアカウント)、サーバーはZ-Pushに接続できるホスト名、アカウント名はよくわからないが、メールアドレスを入力で良いかと。
「サインイン」をクリック。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定9
「すべて完了しました。アカウントは正常にセットアップされました。」と表示されるが、実際はサーバーに正しく繋がるかを含めて何一つ確認なんかしていない大嘘。入力内容に関わらずこの表示になるみたい。
「完了」をクリック。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 10
左列に、上の手順で登録したアカウントが表示される。一応のアカウント登録はここまで。
ただし、ExchangeのPush通知を利用したいので以下。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 11
左列から登録済みのアカウントを右クリック。
「アカウント設定」を右クリッククリック。
または左列の登録済みアカウントをクリックして最下段の

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 12
「メールボックスの同期設定を変更」をクリック。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 13
一番上の「新しいコンテンツをダウンロードする頻度」を「アイテムの受信時」に変更する。(最重要)
下部にある同期オプションで「カレンダー」「アドレス帳」のスイッチをオフにする。
「完了」をクリック。

Windows 10のメールでZ-Push Exchangeメールのアカウント設定 14
メイン画面の右上にある(同期)をクリックするとメールサーバにあるメールが読み込まれる。(IMAPと似た感じ)。 また、今後メールボックス(メールサーバ)にメールが届くと30秒位内程度で自動的に新着メールがWIndows 10の「メール」にも表示されるようになる。まぁ、それがこの記事の目的なんだから、そうならないのはお話にならないわけだが。

と、いうことで、WIndows 10でもほぼリアルタイムにメールの着信を確認できるようになった。

関連記事:

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

関連記事:
Up