状況
reply_by_email_enabledが無効: メールによる返信をさせたくありません- 外部システムからの通知用の管理者専用カテゴリ
- カテゴリにメールアドレスが設定されている
email_inが有効- メールはカテゴリのメールアドレス宛てに送信される
- メールは
BadDestinationAddressでエラー(バウンス)している
原因
1時間ほどのデバッグの末、以下のコミットに辿り着きました FIX: Disallow replies to categories when reply by email disabled (#33… · discourse/discourse@e05ef50 · GitHub
FIX: メールによる返信が無効な場合、カテゴリへの返信を禁止する (#33641)
reply_by_email_enabled設定が false に設定されている場合、メール通知に返信リンクを含めなくなりました。ただし、カテゴリに関連付けられたemail_inアドレス宛ての実際のメール送信は防止されていません。この変更により、Email::Receiver#check_addressでこの設定が考慮されるようになりました。
そして、影響を受けるコード は、reply_by_email_enabled が有効でない場合、カテゴリを返さなくなります。
def self.check_address(address, include_verp = false)
# 'email_in' が有効な場合のみグループ/カテゴリを確認する
if SiteSetting.email_in
group = Group.find_by_email(address)
return group if group
category = Category.find_by_email(address)
return category if category && SiteSetting.reply_by_email_enabled? <-- 追加された
end
なぜ? 
疑問が多数あります:
- なぜこの変更が行われたのですか? 全体的に、これはシステムをより硬直化させるだけです。カテゴリへのメール送信を許可したくないのであれば、カテゴリからメールアドレスを削除すればよいだけでは?
- なぜこのように実装されたのですか?
- グループ宛てのメール受信には問題がないようです。
reply_by_email_enabledが false の場合、カテゴリを検索する必要さえもないのでしょうか?- カテゴリを返さないことで、エラーが
BadDestinationAddressとなり、これは非常に誤解を招くもので、デバッグが非常に困難です。
- この変更で突然依存関係が生じた設定は、reply by email(メールによる返信)と呼ばれています。私が行っているのはそれではありません。
- 同じ混乱が PR のタイトルにも見られます。「disallow replies to categories」(カテゴリへの返信を禁止する)というタイトルですが、これも今回の件とは関係ありません(Discourse では「カテゴリへの返信」自体が不可能です)。
実装方法に加え、正直なところ、この変更の意図が見当たりません。
カテゴリへのメール送信を防止したい場合、カテゴリからメールアドレスを削除すれば問題解決する状況が、私には考えられません。その結果、サイト全体のメールによる返信を有効にせずに、カテゴリがメールを受信できるようになることは、もはや不可能になりました。
私が見落としている本当に良い理由がある場合は、Contribute > Feature として分類し直していただいても構いません。