El problema parece ser que los rebotes que recibo no vienen con un from, por lo que cuando se realiza la llamada a la API como https://forum.example.com/admin/email/smtp_should_reject.json?from=&to=replies+verp-326f6e22828d2543ba65497a47608f13@mail.forum.example.com devuelve un 400 con:
{"errors":["param is missing or the value is empty or invalid: from"]}
Aquí hay un poco más de los registros del receptor de correo:
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>
Sin embargo, incluso si viniera con un from correcto (poniendo mi correo allí), devuelve:
{"reject":true,"reason":"Mail to this address is not accepted. Check the address and try to send again?"}
Así que también lo habría rechazado…
¿Me falta algo en la configuración? No puedo entenderlo.
No. El mismo SMTP, el saliente funciona perfectamente, y el entrante para los temas también llega perfectamente, el problema es que los rebotes no son visibles para el foro, por lo que sigue intentándolo y mi proveedor de alojamiento me regaña.
La respuesta oficial habitual para este tipo de cosas, desafortunadamente, es decir “el correo electrónico es difícil”. Obtendrás resultados mucho mejores si utilizas un proveedor de correo electrónico transaccional.
Si tienes presupuesto, puedes publicar en Marketplace o puedo mover este tema allí por ti.
He revisado el código en cuestión y creo que tienes razón: creo que el código smtp_should_reject puede estar rechazando incorrectamente los mensajes de rebote y las respuestas.
Lo estoy escalando internamente.
Mientras tanto, si deshabilitas el filtro de política discourse-smtp-fast-rejection, ¿permite que el correo fluya?
¡Guau! ¡Gracias por escalarlo! Estaba un poco desesperado, ¡jajaja! Intentaré deshabilitar discourse-smtp-fast-rejection (aunque no estoy seguro de cómo hacerlo, pero buscaré e informaré).
Estoy haciendo mi mail-receiver.yaml así (¿mientras tanto o para siempre? @supermathie)
# esta es la plantilla del contenedor receptor de correo entrante
##
## Después de realizar cambios en este archivo, DEBE reconstruir
## /var/discourse/launcher rebuild mail-receiver
##
## ¡TENGA MUCHO CUIDADO AL EDITAR!
## ¡LOS ARCHIVOS YAML SON MUY, MUY SENSIBLES A ERRORES EN ESPACIOS EN BLANCO O ALINEACIÓN!
## visite http://www.yamllint.com/ para validar este archivo según sea necesario
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
## A dónde se debe enviar el correo electrónico a su foro. En general, está perfectamente bien
## usar el mismo dominio que el propio foro aquí.
MAIL_DOMAIN: community.example.com
# descomente estas (¡y el volumen de abajo!) para admitir 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: ""
## La URL base para esta instancia de Discourse.
## Será la URL de su sitio de Discourse. Por ejemplo,
## https://discourse.example.com. Si está ejecutando una configuración de subdirectorio,
## asegúrese de tenerlo en cuenta (es decir, https://example.com/forum).
DISCOURSE_BASE_URL: 'https://community.example.com'
## La clave API maestra de su foro de Discourse. Puede obtenerla de
## la pestaña "API" de su panel de administración.
DISCOURSE_API_KEY: <YOURKEY>
## El nombre de usuario a utilizar para procesar el correo electrónico entrante. A menos que haya
## renombrado el usuario `system`, debería dejarlo como está.
DISCOURSE_API_USERNAME: system
volumes:
- volume:
host: /var/discourse/shared/mail-receiver/postfix-spool
guest: /var/spool/postfix
# descomente para admitir TLS
- volume:
host: /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/
guest: /letsencrypt