自宅のデバイスからの通知メール送信。
自宅デバイスから、通知メールを送信するだけでとても大変である。
OP25Bで、SMTPサーバーへリレーする必要があるし、SMTPサーバは認証がある。
さらに、普段に通知で使ってるGoogle アカウントが2FA/OAuth必須になり、パスワードが使えなくなった。
GoogleがアカウントパスワードとSMTP/IMAPパスワードを共通にしているのから問題が起きるのだ、SMTP 専用パスワードを発行してくれと思うのだが、Googleはユーザーを2FAに移行させて、複数アカウントを制限するつもりなのかもしれない。よろしい。ならば抵抗する。
SMTP/IMAP で xoauth2
xoauth2 でユーザーを認証すれば、SMTP/IMAPが使える。
OAuthなので、クライアント識別IDを作り、ユーザーからアクセストークンを貰えば、SMTPにログインすることができる。
Exim4は未対応というか、そんなGoogle独自仕様に対応する時間もリソースもねーよみたいな感じ。PostfixはSASLのプラグインを作ってる人がいて、それを使えば対応できるっぽい
postfix に xoauth2を喋らせる。
コード見ながらSASLをmake install するかとおもったら、PPAが用意されていて、拍子抜けだった。
GitHub - tarickb/sasl-xoauth2: SASL plugin for XOAUTH2
PPAなのでUbuntuでPostfixを準備して、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 のレポジトリを更新した。