Smtp_should_reject 400 bad request on nounces

こんにちは!

Configure direct-delivery incoming email for self-hosted sites with Mail-Receiver - #482 by Carleas で説明されている問題と全く同じ問題を抱えています。

問題は、受信するバウンスメールに from が含まれていないため、API呼び出しが https://forum.example.com/admin/email/smtp_should_reject.json?from=&to=replies+verp-326f6e22828d2543ba65497a47608f13@mail.forum.example.com のようになり、400エラーが返されることです。

{"errors":["param is missing or the value is empty or invalid: from"]}

以下は、mail-receiver のログの一部です。

Nov 03 07:34:53 mail postfix/smtpd[1044]: connect from v-108-120-yyy-74-srvr1.xxx.com[74.91.xxx.108]
<19>Nov  3 07:34:53 discourse-smtp-fast-rejection[1048]: Failed to GET smtp_should_reject answer from https://forum.example.com/admin/email/smtp_should_reject.json: 400<22>Nov  3 07:34:53 policyd-spf[1049]: : prepend Received-SPF: None (no SPF record) identity=helo; client-ip=74.91.xxx.108; helo=v-148-29-xxx-192-srvr1.xxx.com; envelope-from=<> ; receiver=mail.forum.example.com Nov 03 07:34:53 mail postfix/smtpd[1044]: NOQUEUE: reject: RCPT from v-108-120-yyy-74-srvr1.xxx.com[74.91.xxx.108]: 450 4.7.1 <replies+verp-326f6e22828d2543ba65497a47608f13@mail.forum.example.com>: Recipient address rejected: Internal error, API request failed; from=<> to=<replies+verp-326f6e22828d2543ba65497a47608f13@mail.forum.example.com> proto=ESMTP helo=<v-148-29-xxx-192-srvr1.xxx.com>

しかし、たとえ from が正しく(私のメールアドレスを入れて)送信されたとしても、次のような応答が返ってきます。

{"reject":true,"reason":"Mail to this address is not accepted. Check the address and try to send again?"}

この場合も拒否されていたでしょう…

設定で何か見落としていることはありますか? どうすればよいかわかりません。

「いいね!」 1

こんにちは。残念ながら、お客様のトピックに関心を持つ方はいらっしゃらなかったようです。ご自身で問題を解決することはできましたでしょうか?

ご利用のメールプロバイダーは何ですか?

いいえ、残念ながらバウンスを受け取っていません…

ただし、cPanel の SMTP サーバーを使用しています。

アウトバウンドメールプロバイダーについてはどうですか?Mailgunまたは他のトランザクションメールプロバイダーを使用していますか?

いいえ。同じSMTPで、送信は完全に機能しており、トピックの受信も完全に届いていますが、問題はバウンスがフォーラムに表示されないため、試行し続け、ホスティングプロバイダーから叱られます。

これを #hosting に送ります。

このようなことに対する典型的な公式回答は、残念ながら「メールは難しい」と言うことです。トランザクションメールプロバイダーを使用すると、はるかに良い結果が得られます。

予算がある場合は、Marketplace に投稿するか、このトピックをそちらに移動させることができます。

ご検討いただきありがとうございます!

「いいね!」 1

DevTeVe様

ご指摘のコードを確認しましたが、おっしゃる通り smtp_should_reject がバウンスメッセージや返信を誤って拒否している可能性があります。

この件は社内でエスカレーションします。

それまでの間、discourse-smtp-fast-rejection ポリシーフィルターを無効にすると、メールの送信は可能になりますでしょうか?

「いいね!」 2

すごい!エスカレーションしてくれてありがとう!ちょっと絶望してました(笑) discourse-smtp-fast-rejection を無効にしてみます(やり方はよくわかりませんが、調べて報告します

「いいね!」 1

If you can remove this line from the mail-receiver postfix config file:

smtpd_recipient_restrictions = check_policy_service unix:private/policy

This should do the trick - I haven’t tested this but I think it’ll work:

postconf -e "smtpd_recipient_restrictions ="
「いいね!」 1

成功!

私は mail-receiver.yaml をこのように設定しています(それまで、または永遠に? @supermathie

# これは受信メールコンテナのテンプレートです
##
## このファイルを変更した後は、必ず再構築してください
## /var/discourse/launcher rebuild mail-receiver
##
## 編集は *十分に注意して* 行ってください!
## YAMLファイルは空白やインデントの間違いに非常に非常に敏感です!
## 必要に応じてこのファイルを検証するには http://www.yamllint.com/ を参照してください

base_image: discourse/mail-receiver:release
update_pups: false

expose:
  - "25:25"   # SMTP

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8

  ## フォーラムに送信されるメールの宛先。一般的に、フォーラム自体と同じドメインを
  ## ここで使用しても問題ありません。
  MAIL_DOMAIN: community.example.com
# TLSをサポートするためにコメントを解除してください(および以下のボリュームも!)
  POSTCONF_smtpd_tls_key_file:  /letsencrypt/community.example.com/community.example.com.key
  POSTCONF_smtpd_tls_cert_file:  /letsencrypt/community.example.com/community.example.com.crt
  POSTCONF_smtpd_tls_security_level: may
  POSTCONF_myhostname: community.example.com
  POSTCONF_mynetworks: "127.0.0.0/8 [::1]/128 [fe80::]/64 172.17.0.0/16"
  POSTCONF_smtpd_recipient_restrictions: ""
  ## このDiscourseインスタンスのベースURL。
  ## これはDiscourseサイトのURLになります。たとえば、
  ## https://discourse.example.com。サブフォルダ設定を実行している場合は、
  ## それを考慮してください(例:https://example.com/forum)。
  DISCOURSE_BASE_URL: 'https://community.example.com'

  ## DiscourseフォーラムのマスターAPIキー。管理パネルの「API」タブから
  ## 取得できます。
  DISCOURSE_API_KEY: <YOURKEY>

  ## 受信メールの処理に使用するユーザー名。`system` ユーザーの名前を
  ## 変更していない限り、そのままにしておく必要があります。
  DISCOURSE_API_USERNAME: system

volumes:
  - volume:
      host: /var/discourse/shared/mail-receiver/postfix-spool
      guest: /var/spool/postfix
# TLSをサポートするためにコメントを解除
  - volume:
      host: /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/
      guest: /letsencrypt
「いいね!」 1

「今のところ」で進め、さらに詳しい情報が入ったらこのトピックを更新します。

「いいね!」 3

どうもありがとうございます!これ以上進展するとは思っていませんでしたが、これで完璧になり、他のすべてのバウンスも受け取っています!

「いいね!」 3