При обработке отказов наблюдаются ошибки smtp_should_reject "400 bad request"

Привет!

У меня, по сути, та же самая проблема, что описана здесь: Configure direct-delivery incoming email for self-hosted sites with Mail-Receiver - #482 by Carleas

Похоже, проблема в том, что уведомления о недоставке (bounces), которые я получаю, не содержат поля 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 было корректным (если бы я указал там свой email), ответ всё равно был бы таким:

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

То есть письмо всё равно было бы отклонено…

Не упустил ли я что-то в конфигурации? Я не могу разобраться.

1 лайк

Здравствуйте! Извините, но, похоже, на вашу тему никто не откликнулся. Вам удалось самостоятельно решить проблему?

Какого провайдера электронной почты вы используете?

Нет, к сожалению, я не получаю уведомления о недоставке…

Хотя я использую SMTP-сервер из cPanel

А что насчёт вашего провайдера исходящей электронной почты? Вы используете Mailgun или какого-то другого провайдера транзакционной почты?

Нет. Тот же SMTP, исходящие сообщения работают отлично, входящие для тем также приходят без проблем. Проблема в том, что отклонения не видны форуму, поэтому он продолжает попытки, и меня ругает мой хостинг-провайдер.

Переношу это в hosting.

К сожалению, типичный официальный ответ на подобные вопросы — «электронная почта — это сложно». Вы получите гораздо лучшие результаты, если воспользуетесь сервисом для транзакционных писем.

Если у вас есть бюджет, вы можете написать в Marketplace, или я могу перенести эту тему туда за вас.

Спасибо, что хотя бы уделили время, чтобы вместе со мной разобраться в этом!!

1 лайк

Привет, DevTeVe,

Я проверил указанный код и считаю, что вы правы — мне кажется, что код smtp_should_reject может некорректно отклонять сообщения об отбое и ответы.

Я эскалирую этот вопрос внутри компании.

Пока что, если вы отключите фильтр политики discourse-smtp-fast-rejection, это позволит почте проходить?

2 лайка

Вау! Спасибо, что взяли это в работу! Я уже немного отчаялся, ха-ха! Попробую отключить discourse-smtp-fast-rejection (хотя точно не знаю, как это сделать, но поищу и отпишусь).

1 лайк

Если вы можете удалить эту строку из файла конфигурации postfix для почтового получателя:

smtpd_recipient_restrictions = check_policy_service unix:private/policy

Это должно помочь — я не проверял это, но думаю, что сработает:

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: ""
  ## Базовый URL этого экземпляра Discourse.
  ## Это будет URL вашего сайта Discourse. Например,
  ## https://discourse.example.com. Если вы используете настройку с подпапкой,
  ## обязательно учтите это (например, https://example.com/forum).
  DISCOURSE_BASE_URL: 'https://community.example.com'

  ## Главный API-ключ вашего форума Discourse. Вы можете получить его
  ## на вкладке "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 лайка

продолжение здесь: Remove smtp_should_reject & discourse-smtp-fast-rejection

2 лайка

Эта тема была автоматически закрыта через 24 часа после последнего ответа. Новые ответы больше не принимаются.