お名前.com で取得していた(ある用途で利用する)ドメインをとある会社に移管したのだが,メールの設定等はそちらでやってね,みたいなことを言われて(正確には,連絡してきた内容が「普通のメールアカウントを作りかた」(しかもメールで先方に指示)のみで),仕方なくお名前.com の共用サーバーに MX 「だけ」向けるアプローチを探すも情報がなかく,Google Compute Engine (GCE)で飼っている VM instance に MX を向けようとするもいろいろハマる.
そもそも以下のとおり,GCE では ポート 25,465,587 はブロックされている.
- https://cloud.google.com/compute/docs/tutorials/sending-mail/
- https://cloud.google.com/compute/docs/networks-and-firewalls#blockedtraffic
G Suiteで Gmail 化するということも考えたが Basic で USD 5/month の費用がかかって,特に今回 ML を作成したい(かなりシンプルな設定のみでOK)ということもあって,Google Group ベースの ML を利用するのもちょっとイマイチな気がして(退会案内のフッタが挿入されるとか),いろいろ悩む.
いろいろ悩んだ結果,Compute Engine ドキュメント|インスタンスからのメールの送信で紹介されているクラウドベースの Email Service を利用することにした.候補はCompute Engine のドキュメントにある以下の3つで考える.この時はメール受信のことはあまり考えていなかった.
https://qiita.com/yukari-n/items/45624096582111dd25b9に記事もあったので,Mailgunを利用することにした.設定は至って簡単.https://www.ritolab.com/entry/39にアカウントの作成から順に解説されている.ちょっとだけ DNS (サーバ側)の設定項目が多いが,これはやむなし.
Mailgun には SMTP Server としての機能があるので(送信サーバとして使用するには認証が必要),Compute Engine からメールを送信する場合は postfix をつかって smtp.mailgun.org:2525 に relay するという設定を行うだけでOK (外向きポート2525なのでブロックされない).
受信メールについても Compute Engine 側に転送できるだろうと思っていたのであるが,Mailgun には SMTP を SMTP に relay する機能がなく(メールは別メールアドレスに転送可能),あったとしても結局 Compute Engine 側でブロックされるということに気づく...
ただ,調べてみると Mailgun でメール転送のルールを書くことができ,かつ,メーリングリストの設定も可能なので,Mailgun 上で全て設定することにした(そもそも,Compute Engine から送信可能とする必要もなかったが,Mailgun の Google パートナーページでアカウントを作成しないと無料枠が 10,000 件になる).
Mailgun での各 ML メンバについて,Subscribe するしない,を設定できる.ML への投稿者限定は以下の種類(https://documentation.mailgun.com/en/latest/user_manual.html#mailing-lists).
- Only allow the administrator to post to the list (limited to an API call or authenticated SMTP session);
- Allow Mailing List members to post to the list; or
- Allow anybody to post to the list.
ML から unsubscribe する自動生成 URL を mail に含めることも可能だが(送信する mail に %mailing_list_unsubscribe_url%
を含める),これは API 経由で送信しなければ %mailing_list_unsubscribe_url%
が正しく変換されない(普通に SMTP で送信するとそのまま送られる).
ちなみに,ML を subscribe している投稿者にはメールが配信されない様子.
追記 (2018/7/11)
MLの詳細.結構独特な挙動をする(特に To: の書き換え).
- To: は ML 宛『のみ』に書き換えられる.Cc: ML (To: だれか)で送付すると,To: と Cc: の両方に ML のアドレスが現れる(「だれか」の情報はMLメンバには届かない).
- 必ず ML 宛の Reply-To: が付与される.API,SMTPともに,もとの Reply-To: は削除される.
- ML を subscribe している投稿者にはメールが配信されない.To: ML, Cc: ML (subscribed) メンバ,として,Cc: のメールアドレスではないメールアドレスから送信した場合,Cc: のメールアドレス宛にはメールが2通届く(mailman の
DontReceiveDuplicates
のような挙動はしない).
また,Route 機能で,特定の宛先宛のメールを他のアドレスに転送することができるが(複数転送することも可能),こちらは上記のような書き換え等は発生しない(ただし誰からでも送信可能になって,メンバの管理 I/F も Web のものだと ML のようなバルク登録はサポートしていない(APIを使って自前で用意すれば可能)).
ちなみに ML と Route は排他的ではなく,ML 宛メールが Route のルールにマッチしていれば,ML にも配信されかつ Route のルールも適用される.
http://mailgun-documentation.readthedocs.io/en/latest/user_manual.html#mailing-lists
Mailing Lists work independently from Routes. If there is a Mailing List or Route with the same address, the incoming message will hit the Route and Mailing List simultaneously. This can be pretty convenient for processing replies to the Mailing List and integrating into things like forums or commenting systems.
追記 (2018/7/11)
他にはmailman のホスティングサービスを利用するということも考えられたのかもしれない.一度リストは見たが,選択肢が多く(比較が大変),面倒になって辞めた.