Smtp_devrait_rejeter 400 mauvaise requête sur nounces

Salut !

J’ai exactement le même problème que celui décrit ici : Configure direct-delivery incoming email for self-hosted sites with Mail-Receiver - #482 by Carleas

Le problème semble être que les bounces que je reçois n’ont pas de champ from. Ainsi, lorsque l’appel API est effectué comme ceci : https://forum.example.com/admin/email/smtp_should_reject.json?from=&to=replies+verp-326f6e22828d2543ba65497a47608f13@mail.forum.example.com, il renvoie un 400 avec :

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

Voici un peu plus de détails des logs de 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>

Cependant, même si un champ from correct était présent (en y mettant mon email), il reviendrait avec :

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

Il aurait donc également rejeté le message…

Est-ce que quelque chose manque dans ma configuration ? Je n’arrive pas à comprendre.

1 « J'aime »

Bonjour ! Désolé, mais il semble que votre sujet n’ait pas trouvé de preneur. Avez-vous pu résoudre votre problème par vous-même ?

Quel fournisseur de messagerie utilisez-vous ?

Non, malheureusement, je ne reçois pas les rebonds…

J’utilise un serveur SMTP de cPanel cependant.

Et votre fournisseur de messagerie sortante ? Utilisez-vous Mailgun ou un autre fournisseur de messagerie transactionnelle ?

Non. Le même SMTP, sortant fonctionne parfaitement, et entrant pour les sujets arrive aussi parfaitement, le problème est que les bounces ne sont pas visibles par le forum, il continue donc d’essayer et je me fais réprimander par mon fournisseur d’hébergement.

Je glisse ceci vers #hosting.

La réponse officielle habituelle pour ce genre de chose est malheureusement de dire « l’email, c’est compliqué ». Vous obtiendrez de bien meilleurs résultats si vous utilisez un fournisseur d’email transactionnel.

Si vous avez un budget, vous pouvez poster dans Marketplace ou je peux déplacer ce sujet là-bas pour vous.

Merci d’avoir pris le temps de examiner cela avec moi !!

1 « J'aime »

Salut DevTeVe,

J’ai examiné le code en question et je pense que vous avez raison - je pense que le code smtp_should_reject peut rejeter incorrectement les messages de rebond et les réponses.

J’escalade cela en interne.

En attendant, si vous désactivez le filtre de politique discourse-smtp-fast-rejection, cela permet-il au courrier de circuler ?

2 « J'aime »

Wow ! Merci d’avoir fait remonter le problème ! J’étais un peu désespéré hahaha ! Je vais essayer de désactiver discourse-smtp-fast-rejection (bien que je ne sache pas trop comment faire, mais je vais chercher et je vous tiens au courant)

1 « J'aime »

Si vous pouvez supprimer cette ligne du fichier de configuration postfix mail-receiver :

smtpd_recipient_restrictions = check_policy_service unix:private/policy

Cela devrait faire l’affaire - je ne l’ai pas testé mais je pense que cela fonctionnera :

postconf -e "smtpd_recipient_restrictions ="
1 « J'aime »

Succès !

Je configure mon mail-receiver.yaml comme ceci (en attendant ou pour toujours ? @supermathie)

# ceci est le modèle de conteneur de réception de courrier
##
## Après avoir modifié ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild mail-receiver
##
## SOYEZ *TRÈS* PRUDENT LORS DE LA MODIFICATION !
## LES FICHIERS YAML SONT EXTRÊMEMENT SENSIBLES AUX ERREURS D'ESPACEMENT OU D'ALIGNEMENT !
## visitez http://www.yamllint.com/ pour valider ce fichier si nécessaire

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

  ## Où le courrier électronique vers votre forum doit être envoyé. En général, il est tout à fait acceptable
  ## d'utiliser le même domaine que le forum lui-même ici.
  MAIL_DOMAIN: community.example.com
# décommentez ceci (et le volume ci-dessous !) pour prendre en charge 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: ""
  ## L'URL de base pour cette instance Discourse.
  ## Ce sera l'URL de votre site Discourse. Par exemple,
  ## https://discourse.example.com. Si vous utilisez une configuration en sous-dossier,
  ## assurez-vous d'en tenir compte (par exemple, https://example.com/forum).
  DISCOURSE_BASE_URL: 'https://community.example.com'

  ## La clé API maîtresse de votre forum Discourse. Vous pouvez l'obtenir
  ## dans l'onglet "API" de votre panneau d'administration.
  DISCOURSE_API_KEY: <YOURKEY>

  ## Le nom d'utilisateur à utiliser pour le traitement du courrier entrant. Sauf si vous avez
  ## renommé l'utilisateur `system`, vous devriez le laisser tel quel.
  DISCOURSE_API_USERNAME: system

volumes:
  - volume:
      host: /var/discourse/shared/mail-receiver/postfix-spool
      guest: /var/spool/postfix
# décommentez pour prendre en charge TLS
  - volume:
      host: /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/
      guest: /letsencrypt
1 « J'aime »

Optons pour « pour l’instant » et nous mettrons à jour ce sujet lorsque nous aurons plus de nouvelles.

3 « J'aime »

Merci beaucoup ! Je ne m’attendais vraiment pas à ce que cela progresse davantage, mais maintenant c’est parfait et je reçois tous les autres retours !

3 « J'aime »