メール
任意。有効にすると登録とパスワード再設定の流れが変わる
必須ではありません。ひとりで使う自宅のインスタンスなら、たいてい設定しません。パスワードを忘れてもコマンドラインで直せるからです。
設定する
管理画面か、環境変数で設定します。
| 設定 | |
|---|---|
mail.host | 中継サーバー |
mail.port | デフォルトは 587 |
mail.tls | 接続の暗号化方法。下を参照 |
mail.username、mail.password | 保存すると封印され、管理画面にも二度と表示されない |
mail.from | 送信元アドレス。中継サーバーがあなたからの送信を受け付けるドメインにする |
mail.public_url | メール内のリンクの先頭部分。受け取った人のブラウザが開けるアドレスにする |
メールを設定済みとみなすには、host、from、public_url の三つすべてに値が必要です。半分だけ埋めた設定は、動かさずに断ります。動かすと、誰かがすでに締め出されているときに限って失敗する「パスワードを忘れた」リンクを出してしまうからです。
接続の暗号化
mail.tls は次のどれかです。
- auto(デフォルト): ポート 465 は最初のバイトから TLS、それ以外のポートは STARTTLS を使います。
- starttls か implicit: どちらかに固定します。
- none: 同じマシンやネットワーク上の中継サーバー向けです。ローカルの postfix、中継用のコンテナ、Mailpit などです。中継サーバーのアドレスがプライベート、ループバック、リンクローカルのどれかでなければ送信を断ります。
auto の動きが変わった
以前のバージョンは、587 でだけ STARTTLS を使い、それ以外はすべて最初のバイトから TLS でした。465 以外のポートで最初から TLS を求める中継サーバーには、implicit を明示する必要があります。間違えると、証明書の問題のように見えるハンドシェイクエラーになります。
| 設定 | デフォルト | 上限 |
|---|---|---|
reset_ttl_minutes | 30 | 24 時間 |
registration_ttl_hours | 24 | 7 日 |
登録が二段階になる
設定していなければ、登録するとすぐにアカウントができ、サインインした状態になります。
設定していると、まだ何も作りません。入力内容を保持し、メールのリンクを開いたときに初めてアカウントができます。
誰でも他人のアドレスを入力できるからです。すぐにアカウントを作ると、見知らぬ人がそのアドレスとユーザー名を押さえ、自分では読めない受信トレイの陰でインスタンスのストレージを使えてしまいます。
フロントエンドは /capabilities を読む
「メールを確認してください」と「ようこそ」のどちらを出すかは、ステータスコードから推測せず、
registration_requires_confirmation で決めてください。推測を間違えると、まだ受信トレイを
開く必要がある人に「ようこそ」と言ってしまいます。
返ってくる応答は次のとおりです。
- ユーザー名が使われている。 ユーザー名は本人が選んだ呼び名なので、そのまま伝えます。
- アドレスにすでにアカウントがある。 成功したときとまったく同じく「メールを確認してください」と伝え、そのアドレスには誰かが試みたというメールを送ります。「そのアドレスは使われています」と言うと、登録フォームが「この人はこのインスタンスにいるか」を問い合わせる場所になってしまいます。
- 同じアドレスへのメールが多すぎる。 1 時間に 3 通までで、登録と再設定は別々に数えます。
もう一度登録するしかありません。
確認待ちのあいだ、ユーザー名は予約しません。予約すると、「登録して確認しない」だけでよい名前をすべて押さえられてしまい、運営者には手の打ちようがありません。代わりに、ときどき誰かがフォームを二回入力することになります。
パスワードの再設定
再設定を求めると、アドレスにアカウントがあってもなくても同じ答えを返します。理由は上と同じです。メールを設定していなければ再設定リンクそのものがなく、インスタンスはそう伝えます。フロントエンドは、動かない選択肢を出す代わりに、その項目を外せます。
メールはデフォルトで組み込まれていて、外すと 37 KB 減ります。上の設定とは別の話です。こちらはプログラムがメールを送れるかどうか、上の設定はこのインスタンスが送るかどうかを決めます。
cargo build --no-default-features --features sqlite,storage-fs