hydroxideを使い無料アカウントのProton MailでもIMAP/SMTPを使う

Proton MailでOSSのメールブリッジを使うことで無料アカウントでもIMAP/SMTPが利用できたのでメモしておきます．

ProtonMailというスイスの会社のメールサービスがあります．コードはOSSで公開されており，自動的にPGP鍵を作成してE2EEを使えたりします．

Proton Mail: Get a private, secure, and encrypted email account | Proton

https://protonmailrmez3lotccipshtkleegetolb73fuirgj7r4o4vfu7ozyd.onion/

現在はオンラインストレージ，VPN，カレンダー，パスワードマネージャーなどのサービスも開始しています．無料でも使えますし，脱gmailな向きには勧めやすいサービスです．

しかし，無料ではIMAP/SMTPが利用できないため好みのMUAが利用できずウェブインターフェイスしか利用できません．€4.99よりの有料プランにアップグレードすることでProton Mail Bridgeというプログラムを利用してIMAP/SMTPが利用できるようになり，好みのMUAが使えるようになります．

Email client support (via IMAP/SMTP)
Proton Mail supports desktop clients such as Outlook, Apple Mail, Thunderbird, etc. via Proton Mail Bridge.

Proton Mail Bridge Support | Proton

Verifying the Proton Mail Bridge package for Linux | Proton

ProtonMail/proton-bridge: Proton Mail Bridge application

無料アカウントでProton Mail Bridgeを試すとアップグレードを勧められて使えません．

hydroxideを使う

hydroxideはGo製MITライセンスのProton bridgeです．IMAP/SMTPの他にCardDAVにも対応しています．
Proton Mail Bridgeと違い，GUIは提供されていません．

emersion/hydroxide: A third-party, open-source ProtonMail CardDAV, IMAP and SMTP bridge

hydroxideのインストール

ビルドとインストール

$ git clone https://github.com/emersion/hydroxide.git (1)
$ cd hydroxide
$ go build ./cmd/hydroxide (2)
$ install ./hydroxide ~/bin/ (3)
$ which hydroxide
/home/matoken/bin/hydroxide

sourceのclone

build

好みの場所にインストール

help

$ hydroxide --help
usage: hydroxide [options...] <command>
Commands:
auth <username> Login to ProtonMail via hydroxide
carddav Run hydroxide as a CardDAV server
export-secret-keys <username> Export secret keys
imap Run hydroxide as an IMAP server
import-messages <username> [file] Import messages
export-messages [options...] <username> Export messages
sendmail <username> -- <args...> sendmail(1) interface
serve Run all servers
smtp Run hydroxide as an SMTP server
status View hydroxide status

Global options:
-debug
Enable debug logs
-api-endpoint <url>
ProtonMail API endpoint
-app-version <version>
ProtonMail application version
-smtp-host example.com
Allowed SMTP email hostname on which hydroxide listens, defaults to 127.0.0.1
-imap-host example.com
Allowed IMAP email hostname on which hydroxide listens, defaults to 127.0.0.1
-carddav-host example.com
Allowed SMTP email hostname on which hydroxide listens, defaults to 127.0.0.1
-smtp-port example.com
SMTP port on which hydroxide listens, defaults to 1025
-imap-port example.com
IMAP port on which hydroxide listens, defaults to 1143
-carddav-port example.com
CardDAV port on which hydroxide listens, defaults to 8080
-disable-imap
Disable IMAP for hydroxide serve
-disable-smtp
Disable SMTP for hydroxide serve
-disable-carddav
Disable CardDAV for hydroxide serve
-tls-cert /path/to/cert.pem
Path to the certificate to use for incoming connections (Optional)
-tls-key /path/to/key.pem
Path to the certificate key to use for incoming connections (Optional)
-tls-client-ca /path/to/ca.pem
If set, clients must provide a certificate signed by the given CA (Optional)

Environment variables:
HYDROXIDE_BRIDGE_PASS Don't prompt for the bridge password, use this variable instead

認証

authオプションでProton Mailとhydroxideの間での認証と，hydroxideとMUAの間で使うパスワードの生成を行います．
Proton Mailとの認証後に表示されるブリッジパスワードはMUAとの認証に使います．保存しておきましょう．

$ hydroxide auth <username>

認証情報は ~/.config/hydroxide/ 以下のファイルに保存されます．

hydroxideの起動

SMTP

smtpオプションでSMTPのブリッジが起動します．

$ hydroxide smtp

port

1025

セキュリティ

なし

user

Proton Mailと同じ

password

authオプションで表示されたブリッジパスワード

CardDav

carddavオプションでCardCadのブリッジが起動します．httpsリバースプロキシを起動して利用するようですが未検証．

$ hydroxide carddav

IMAP

imapオプションでIMAPのブリッジが起動します．

$ hydroxide imap

port

1143

セキュリティ

なし

user

Proton Mailと同じ

password

authオプションで表示されたブリッジパスワード

Warning

IMAPのサポートは進行中らいいです．とりあえず数時間使った程度だと普通に使えていそうです．

serveオプションで複数のサービスの起動

hydroxideを複数起動しないようにとの注意がREADME.mdにあります．複数のサービスを起動したい場合はserveオプションで全てのサービス(SMTP, CardDav, IMAP)が起動します．

$ hydroxide serve

3つのサービスのうち2つだけを起動したい場合はserveオプションの他に-disable-サービス名のオプションを指定します．以下はCardDavを無効にしてSMTPとIMAPが起動します．

$ hydroxide -disable-carddav serve

MUAの設定

hydroxideを起動した状態で好みのMUAに設定を行います．
TLSなどには非対応なので注意．

あとは普通に利用できます．
Proton Mailに作られたたものではない自分のPGP鍵を使うこともできます :)

hydroxideの自動起動とアクセス制限

はじめRaspberry Piでhydroxideを起動してLaptopのMUAから繋ごうと思っていましたが，既定値ではTLSが利用されず通信が平文で行われるのでリモートで動かすのはやめてlocalhostで動かすことにしました．

MUAでメールを送受信するときにはhydroxideが起動している必要があります．
デスクトップ環境の自動起動機能や，crontabの@rebootなどやMUAの起動scriptに加えたりすると良さそうです．

そしてそのままだとリモートから繋ぐこともできるのでlocalhostからしか受け付けないようnftableなどで制限を掛けたほうが良さそうです．

おわりに

ということでhydroxideを利用し，無料アカウントでProton MailのIMAP/SMTPを使えるようにして自分好みのMUAを利用できるようになりました．これでウェブブラウザを起動しなくてもメールの送受信ができたり自分の作成したPGP鍵を利用できます．
ただ，hydroxideもProtonのAPIを叩いているようなのでProton BrisgeのようにProton側で無料アカウントに対してアクセス制限をするようになると使えなくなると思います．そのためいつまで利用できるかわからない方法です．それが嫌なら有料アカウントにアップグレードするか別のサービスを使うしかなさそうです．

環境

$ git log –pretty=oneline -1
c964219ad4996d90b34d730b98a8c736b9bc9921 (HEAD -> master, tag: v0.2.29, origin/master, origin/HEAD) Support BODY and TEXT in search

$ dpkg-query -W golang
golang:amd64 2:1.23~2
$ lsb_release -dr
Description: Debian GNU/Linux trixie/sid
Release: n/a
$ arch
x86_64

環境2(Raspberry Pi OS bookworm armhf)

$ git log --pretty=oneline -1
c964219ad4996d90b34d730b98a8c736b9bc9921 (HEAD -> master, tag: v0.2.29, origin/master, origin/HEAD) Support BODY and TEXT in search
$ dpkg-query -W golang
golang:armhf 2:1.19~1
$ lsb_release -dr
No LSB modules are available.
Description: Raspbian GNU/Linux 12 (bookworm)
Release: 12
$ arch
armv7l