2022年あたりから、個人ドメインで無料Gmailを使ったメールのやり取りが、SPFの導入により難しくなった。環境を再構築した。
やりたいこと
- 独自ドメインを個人メールに使用。
- Gmailに全てのメールを持ち、Gmailでメールを書く。
- メール受信時、iPhoneで通知をもらう。
- iPhone(iOS)上では、Gmailアプリを使い、Appleのメールアプリはアンインストールする。
- Mac上では、Webのみ使う(メールアプリは使わない)。通知は不要。
- SPFが設定されたドメインで送信されたメールを正しく受信できる。
- 遅延なく「今受信したメール」を確認できる。
- 簡単なGUIでメールアカウントを管理(追加、削除、転送設定等)できる。
Gmailで一本化
Gmailですべてのメールを送受信し、アドレス帳を管理する。他のメールサービスにメールは保存しない。
Gmailならどこからでも便利にアクセスでき、macのmigration、iPhone / Androidのmigrationも必要ない。あらゆる場所や環境から唯一Gmailのメールストレージ・メールクライアントを操作する。
Google Workspaceは利用しない
個人のためで、他に有料で使いたいGoogleツールがない場合はオーバースペックな上、個人アカウントとの行き来(個人→business、business→個人)がかなり面倒(いずれもmigrationが必要)。
メールだけの場合、月額680円はやや高額。
メールサーバーは自分で管理しない(EC2インスタンス等)
エンジニアならEC2インスタンスにPostfix/Dovecot入れて、設定ファイルでメールサーバーを管理するという方法もある。他の用途でEC2インスタンスがある場合は特に。しかし、OSをメンテナンスしたり、packageをupgradeしたり、設定を編集してserviceを再起動したり、トラブル時に調査したり等、面倒な作業が多いため、やらない。
個人ドメインに対応した有料のメールサービスが存在する。
メールボックスはあくまで一時データを保存するためで、Gmail側でメールを取得したらメールボックスからはデータを消す。そのため容量は1GBでも十分なぐらい。
メールボックスとして、SMTPサーバーとIMAPサーバーでセキュアな通信(SSL/TLS)に対応したサービスなら基本的にOK。例えばさくらメールボックスとAWS WorkMailはいずれも対応していて、設定しやすいGUIが提供されている。
- さくらメールボックスは月額100円未満。ストレージも20GBと余裕がある。IMAPでメールを閲覧できる。
- AWS WorkMail は月額4ドル。ストレージは50GBもある。IMAPでメールを閲覧できる。(Exchange ActiveSyncにも対応しているがここではGmailクライアントを使いたいので使わない。)
Gmailにメールを転送せず、「今受信したメール」を常に確認できるようにしたい
SPFが設定されたドメインからのメールを受信したい場合、SPFの仕組み上、メールの転送機能は利用できない。転送は諦める。
また、転送せず個人ドメインのメール(カスタムメール)を持つ方法としてGoogle Workspaceのアカウントという方法が存在するが、前述の通り、面倒だし高額なためやりたくない。
転送以外な方法として、Gmailには定期的に(1時間に1回程度)IMAP/POPでメールサーバーからメールを取得する機能がある。がしかし、それでは「今受信したメール」が簡単には確認できない(設定に行き、メールを確認するをクリックする必要があり、面倒)。
ここが一番設計がむずかしい部分で、一部の機能を少し割り切って設計が必要。
「今受信したメール」を確認したいのは、サービスからくるメールのみ
個人とのコミュニケーションにおいて、リアルタイムでメッセージやり取りをするなら、そもそもメールを使うべきか。LINEやメッセンジャーを使うべきだと考える。
サービスから届くメールのほどんどは緊急性が無いものばかり。そもそもサービスから受けたい緊急なメッセージがあるなら、プッシュ通知を利用するべきと考える(例:フリーマーケットのチャットのやり取り)。
しかし、すぐに受信したいメールも一応存在する。
- ログインして、二段階認証のコードがメールで届いている場合。
- サービスに登録して、メールアドレスの確認メールが届いている場合。
- 自分のアクション(商品の購入、予約等)に対する確認メールが届いていて、それをすぐに確認したり、それに対し更にアクションを起こしたいケース(やっぱキャンセル、関係者に転送する等)。
これらのケースはいずれも、メールを確認したいタイミングは分かっていて、やりたいことは単純な作業。メールを確認したいタイミングは、Webやアプリで操作しているときであるため、メール受信のリアルタイムプッシュ通知は必要ないと思われる。プッシュ通知があったとしても、あくまでショートカットとしてのプッシュ通知であり、タイミングを通知してくれるものではない。
メールの受信を即座に検出して、リアルタイムでプッシュ通知が届くのがベストだが、これは諦めるとする。残る課題は、手動で「今受信したメール」をいかにシームレス&簡単にできるようにできるか。調べたところ、Gmailアプリのマルチアカウント機能を使うのが一番手っ取り早かった。
Gmailアプリには複数のアカウントでメールの確認ができ、アカウント切り替えはせずとも、「すべての受信トレイ」に全アカウントのメールが確認できる。IMAPアカウントを入れておけば直接メールサーバーのメールを閲覧(参照のみで削除せず)できる。
まとめると、次の対応表になる。
機能 | Web | iOS |
---|---|---|
メール受信のプッシュ通知 | 重視しない(リアルタイムでない) | 重視しない(リアルタイムでない) |
「今受信したメール」の確認 | 確認しない | Gmailアプリを立ち上げることで確認 |
ソリューション
前提
- ドメインを持っている。
- うちはドメインの登録はValue-Domain、ネームサーバーはRoute53。
- メールクライアントはGmail、WebとiOSアプリを利用する。
- メールサーバーのサービス(IMAP/POP、SMTP)を利用する。
- うちはメールサーバーはさくらのメールボックス(安い、メールボックスの追加が楽なため)。
メールボックスの設定
使い分けのためメールボックス(アライアス等)が複数あると思われるが、Gmail受信用のメールボックスを1つ設けておく(あるいはメインのメールボックスを1つ選ぶ)。
このメールボックスに、Gmailで受信したいメールを全て転送しておく。同じメールサービス内のメール転送はSPFチェック等が無い。
Web上のGmailの設定
Gmailの「設定 / アカウントとインポート」にて、次の設定を行う。
- 「他のアカウントのメールを確認」に確認するメールボックスを設定する。
- 「名前(Gmail を使用して他のメール アドレスからメールを送信します)」に送信用のアカウントを設定する。
iOS版Gmailアプリの設定
アカウントを2つ設定する。
- Web上で設定したGmailアカウント。
- メールサーバーのIMAPアカウント。
「すべての受信トレイ」を常時使えばアカウント切り替えは必要ない。メインであるGmailアカウントを常に設定しておける。アプリ立ち上げ時や、メール画面を下に引っ張って更新すると、IMAPアカウントのメールがすぐに受信できる。
Gmailアカウント側のメールは1時間に1回ぐらいしか更新されないが、IMAPアカウント側のメールはすぐに確認できる。Gmailアカウント側のメールが更新されたときには、IMAPアカウント側のメールは削除されているため、表示されなくなる。Gmail側が受信したメールはメールサーバーから削除される。
キャッシュの関係で一時的に両方のアカウントで同じメールが表示されることがあるが、見分けるのは簡単で大した問題にならない。画面更新やアプリ再起動等ですぐにIMAP側のメールは消える。注意するべきなのは、メールを送信するとき。IMAPアカウントから送信しないこと、それだけになる。