それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Postfixをxoauth2に対応させ、smtp.gmail.comへリレーする

自宅のデバイスからの通知メール送信。

自宅デバイスから、通知メールを送信するだけでとても大変である。

OP25Bで、SMTPサーバーへリレーする必要があるし、SMTPサーバは認証がある。

さらに、普段に通知で使ってるGoogle アカウントが2FA/OAuth必須になり、パスワードが使えなくなった。

GoogleがアカウントパスワードとSMTP/IMAPパスワードを共通にしているのから問題が起きるのだ、SMTP 専用パスワードを発行してくれと思うのだが、Googleはユーザーを2FAに移行させて、複数アカウントを制限するつもりなのかもしれない。よろしい。ならば抵抗する。

SMTP/IMAP で xoauth2

xoauth2 でユーザーを認証すれば、SMTP/IMAPが使える。

OAuthなので、クライアント識別IDを作り、ユーザーからアクセストークンを貰えば、SMTPにログインすることができる。

Exim4は未対応というか、そんなGoogle独自仕様に対応する時間もリソースもねーよみたいな感じ。PostfixSASLのプラグインを作ってる人がいて、それを使えば対応できるっぽい

postfix に xoauth2を喋らせる。

コード見ながらSASLをmake install するかとおもったら、PPAが用意されていて、拍子抜けだった。

GitHub - tarickb/sasl-xoauth2: SASL plugin for XOAUTH2

PPAなのでUbuntuPostfixを準備して、SASLを入れたらあっさり解決。

sudo add-apt-repository ppa:sasl-xoauth2/stable
sudo apt-get update
sudo apt-get install sasl-xoauth2

OAuthのクライアントIDとアクセストークンは、専用のジェネレーターであっさりと入手が可能だった。

これで、XOAUTH2を使ったSMTPサーバを作ることができ、GMAILにスマートリレーすることができた。

調べれば、あっさりと解決した。

Gmailユーザー(非 gsuite/ workspace )の場合

自分のプロジェクトを作り、OAuth ID を発行して、自分でCredentialsを作り、自分で自分をOAuthする。

サービスアカウントでは動かなかった。Gmailはセンシティブなプライバシー情報を扱うためだろうか

docker にした。

時間が余ったので、あとで色々とインストールしやすいように、Dockerでパッケージ化し、Postfixの環境一式をDockerの中に閉じ込めておいた。

これで、UbuntuがバージョンアップしてもPPA経由でしばらくは動くはずである。

作ったdocker パッケージ → GitHub - takuya/postfix-gmail-smtp-for-oauth

Gsuiteアカウント

Gsuiteアカウントは、OAUTHに「内部」が指定できるので、このXOAUTHの方法で問題ない。メリットしてはパスワードを記載しておく必要がなくなる点。Gsuiteアカウントでもパスワード認証は継続されてるのでXOauthは必ず必要ではないという点もある。メリットはPostfixにパスワードを記載する必要がない。この1点である。

ただ、通常のフリーメールアドレスであるGmailの場合は、この方法では7日制限を食らうので、とても不便だ。

かといってサービスアカウントを使う事もできない。一般Gmailであれば、もはやAppパスワードを使うしかないのかもしれない。

2022-09-01

  • サービスアカウントについて言及
  • git のレポジトリを更新した。