O problema parece ser que os bounces que estou recebendo não vêm com um from, então quando a chamada da API é feita como https://forum.example.com/admin/email/smtp_should_reject.json?from=&to=replies+verp-326f6e22828d2543ba65497a47608f13@mail.forum.example.com, ela retorna um 400 com:
{"errors":["param is missing or the value is empty or invalid: from"]}
Aqui estão mais alguns logs do 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>
No entanto, mesmo que viesse com um from correto (colocando meu e-mail lá), retornaria:
{"reject":true,"reason":"Mail to this address is not accepted. Check the address and try to send again?"}
Então, também teria rejeitado…
Estou perdendo alguma coisa na configuração? Não consigo descobrir.
Não. O mesmo SMTP, o de saída está funcionando perfeitamente, e o de entrada para tópicos também está chegando perfeitamente, o problema é que os bounces não são visíveis para o fórum, então ele continua tentando e eu sou repreendido pelo meu provedor de hospedagem.
A resposta oficial típica para esse tipo de coisa, infelizmente, é dizer “e-mail é difícil”. Você terá resultados muito melhores se usar um provedor de e-mail transacional.
Se você tiver um orçamento, pode postar em Marketplace ou posso mover este tópico para lá para você.
Revisei o código em questão e acredito que você está certo - acho que o código smtp_should_reject pode estar rejeitando incorretamente mensagens de devolução e respostas.
Estou escalando isso internamente.
Enquanto isso, se você desativar o filtro de política discourse-smtp-fast-rejection, isso permite o fluxo de e-mails?
Uau! Obrigado por escalar! Eu estava um pouco sem esperança hahaha! Vou tentar desabilitar discourse-smtp-fast-rejection (embora eu não tenha certeza de como fazer isso, mas vou pesquisar e reportar de volta)
Estou configurando meu mail-receiver.yaml assim (enquanto isso ou para sempre? @supermathie)
# este é o template do container receptor de e-mail
##
## Após fazer alterações neste arquivo, VOCÊ DEVE reconstruir
## /var/discourse/launcher rebuild mail-receiver
##
## TENHA MUITO CUIDADO AO EDITAR!
## ARQUIVOS YAML SÃO SUPER SUPER SENSÍVEIS A ERROS DE ESPAÇAMENTO OU ALINHAMENTO!
## visite http://www.yamllint.com/ para validar este arquivo conforme necessário
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
## Para onde o e-mail para o seu fórum deve ser enviado. Em geral, é perfeitamente aceitável
## usar o mesmo domínio do fórum aqui.
MAIL_DOMAIN: community.example.com
# descomente estas linhas (e o volume abaixo!) para suportar 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: ""
## A URL base para esta instância do Discourse.
## Será o que quer que seja a URL do seu site Discourse. Por exemplo,
## https://discourse.example.com. Se você estiver executando uma configuração de subpasta,
## certifique-se de levá-la em conta (ou seja, https://example.com/forum).
DISCOURSE_BASE_URL: 'https://community.example.com'
## A chave API master do seu fórum Discourse. Você pode obtê-la na
## aba "API" do seu painel de administração.
DISCOURSE_API_KEY: <YOURKEY>
## O nome de usuário a ser usado para processar e-mails recebidos. A menos que você tenha
## renomeado o usuário `system`, você deve deixar isso como está.
DISCOURSE_API_USERNAME: system
volumes:
- volume:
host: /var/discourse/shared/mail-receiver/postfix-spool
guest: /var/spool/postfix
# descomente para suportar TLS
- volume:
host: /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/
guest: /letsencrypt