こんにちは、
自己ホスト型の Discourse インスタンスをあるサーバーから別のサーバーへ移行しました。すべての設定(「メールで返信」および「メール経由での新規投稿の許可」を含む)が旧システムから新システムへ移行されました。メール処理には discourse/mail-receiver 構成を使用しています。
旧システムでは「返信先」機能と「新規メール」機能の両方が正常に動作していましたが、新サーバーでは「返信先」機能が動作しなくなりました。
- 未登録ユーザーとして、そのために設定されたメールアドレスにメールを送信すると、メールが受信されているのが確認できます。新しいステージングユーザーが作成され、メッセージが投稿されます。素晴らしい!
- チームユーザーとしてこのメッセージに返信すると、正常に配信されます。最高です!
- しかし、そのメールに再度返信して Discourse 内の返信を作成しようとしても失敗します。メールが mail-receiver に到着すると、API を介して配信しようとしますが、以下のログエラーで失敗します。
(プライバシー保護のため、ユーザー名とドメイン名を変更しています)
<22>Sep 13 09:45:15 postfix/qmgr[81]: AF8665CA560: from=<test-user@outside-org.nl>, size=9233, nrcpt=1 (queue active)
<23>Sep 13 09:45:15 receive-mail[144]: Recipient: 6ffb2772c3b09bf60fc2705753fb32ce@forum.acme.org
<19>Sep 13 09:45:15 receive-mail[144]: Failed to POST the e-mail to https://forum.acme.org/admin/email/handle_mail: 400
<22>Sep 13 09:45:15 postfix/pipe[143]: AF8665CA560: to=<6ffb2772c3b09bf60fc2705753fb32ce@forum.acme.org>, relay=discourse, delay=1126, delays=1126/0.01/0/0.21, dsn=4.3.0, status=deferred (temporary failure)
前述の通り、この一連のやり取りは旧環境では完全に正常に動作していました。新環境は旧環境と全く同じ構成(local_discourse/app および local_discourse/mail-receiver)です。
- 返信メールに対して handle_mail API が 400 エラーを返す原因は何でしょうか?
- ログ出力をより詳細に設定して、さらに詳しく調査することは可能でしょうか?
RGJ
(Richard - Communiteq)
2
管理画面の「メール」→「拒否されたメール」で、さらに詳しい情報が見つかるはずです。
いいえ、すみません、「拒否」として表示さえされません。おそらく400 Bad Requestに抵触しているためでしょう。
「新しいメール」と「返信メール」の違いは何なのか気になっています。私の考えでは、重要な違いは宛先だけだと言えます。どちらも同じハンドラー(mail-receiver)を経由し、同じ API: https://forum.acme.org/admin/email/handle_mail に投稿されています。
pfaffman
(Jay Pfaffman)
5
それも移行されましたか?MX レコードも更新されましたか?
フォーラムのホスト名は変更されましたか?
- メール受信機能も移行されました。
- ホスト名は変更ありません。
問題は MX レコードにはありません。ログによると、メールは mail-receiver に正常に到着していますが、API に送信するとすぐに 400 エラー(不正なリクエストを意味します)が返されます。
ただし、設定には違いがあります。一時的なオフライン機能を得るため、また同じホスト上に他のウェブサイトも配置できるようにするために、リバースプロキシ(nginx)を前面に配置しました。しかし、新しいトピックが何の問題もなく受け付けられている以上、なぜそれが問題になるのか依然として理解できません。それでも、リバースプロキシを除外した場合にどうなるか確認してみます…
更新
残念です!Discourse のインストールを nginx リバースプロキシの背後から移動させました(正しい設定で app を再構築し、nginx をシャットダウンしました)が、これでも問題は全く解決しませんでした!
今、私は本当に途方に暮れています。一体何が起きているのでしょうか?
まとめ:
- 以前の Discourse インストール(app および mail-receiver)では、新しいトピックや返信を受け付けることができました
- 新しいサーバーへ移行後(すべて同じ設定ですが)、新しいトピックは受け付けられるものの、返信は 400 Bad Request で拒否されています
この状況を招いている問題を見つけました。
複数のメールクライアントで試したところ、デスクトップクライアント(Thunderbird)から送信したメールは「400 Bad Request」エラーが発生しましたが、Web クライアントを使用すると返信が正常に届きました。
さらに調査したところ、Thunderbird は返信時に何らかの理由でWestern (Windows-1252) エンコーディングに切り替わっていましたが、Web クライアントはUTF-8を維持していました。Thunderbird で UTF-8 使用を強制したところ、メールも正常に届くようになりました。
Thunderbird(メールが通過せず)
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: 7bit
Web メール
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Thunderbird(メールが通過)
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
メール受信側ではエンコーディングのチェックとサニタイズを行う必要があると思いますが、Ruby 開発者ではないため、該当部分のコードは開発者にお任せします 
system
(system)
クローズされました:
9
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.