署名/表/インライン画像を含む受信メールが「アクセス拒否」で拒否される

更新:Access Denied(アクセス拒否)エラーの原因を再現し、PR を作成しました:

私の元の観察結果の重要な点は以下の通りです:

  • 簡易/プレーンな受信メール → 受理
  • 埋め込みメディアを含むリッチなメール → Access Denied で拒否

拒否されたメッセージは、外部ユーザーからの受信メールを許可するカテゴリにおいて、ステージング/外部ユーザーとして処理されていました。

#42079 以降、NewPostManager は画像サイズのメタデータがない場合、投稿コンテンツから直接埋め込みメディアを検出します。これにより、これらのメッセージは正しく :contains_media のレビューパスに送られます。

しかし、投稿をレビューキューに追加する前に、NewPostManager.default_handler は通常のカテゴリトピック作成の Guardian チェックを実行します。

ステージング中の受信メールユーザーの場合、Email::Receiver がすでにカテゴリの外部ユーザーメールパスを受理し skip_validations を渡しているにもかかわらず、このチェックは失敗する可能性があります。

これにより、私が遭遇していた以下のエラーが発生します:

Email::Receiver::InvalidPost: Access Denied

外部ユーザーからのメディアを含むメールに対するエンドツーエンドの受信機回帰テストを追加しました。

現在の main ブランチでは、修正前にこのテストは以下を再現します:

Email::Receiver::InvalidPost: Access Denied

また、#42079 の直前でも同様のケースをテストし、受信メールが受理されることを確認しました。これにより、この問題がその変更によって導入された回帰エラーであることが確認できました。

この PR は意図されたメディアモデレーションをバイパスするのではなく、それを維持します。修正により、受信メールは ReviewableQueuedPost としてキューに追加され、そのレビュー理由は以下のように保持されます:

contains_media

関連する Email::Receiver および NewPostManager のスペックはローカルで正常に実行されました:

261 examples, 0 failures

したがって、これは私が上記で報告した Access Denied の挙動、特にプレーンなメールが機能した一方で埋め込みメディアを含むリッチなメッセージが機能しなかった理由を説明していると考えられます。