Zurückgesendete E-Mails nicht erkannt

Ich versuche herauszufinden, wie Discourse E-Mail-Listen bereinigt, insbesondere abgewiesene E-Mails. Die Website verwendet einen privaten SMTP-Server zum Senden von E-Mails, aber die Antwortadresse ist so eingestellt, dass sie an eine Gmail-Adresse für den POP-Zugriff durch Discourse zurückkommt.

Daher sehe ich abgewiesene E-Mails im Dashboard Empfangene E-Mails.

Im Dashboard Abgewiesene E-Mails ist jedoch nichts zu sehen.

Wenn ich mir die Discourse-Fehlerprotokolle ansehe, sehe ich, dass es eine abgewiesene E-Mail erkennt.

E-Mail kann nicht verarbeitet werden: Email::Receiver::BouncedEmailError

Delivered-To: xxx.yyy@gmail.com
Received: by 2002:xxx:7022:911:xx:73:xxx:f96 with SMTP id xxx7csp1115046dlb;
Thu, 25 Jan 2024 12:03:33 -0800 (PST)
X-Google-Smtp-Source: AGHT+IEagzW8QOUgAyfOxU9wYaox/wuiL/wNqWhvftUB4uO/85r9H/55+FnfT6NrSTkLI5kfj+Vy
X-Received: by 2002:xxx:620a:4xxx:b0:xxxx:9265 with SMTP id br34-xxx8ba09265mr280168qkb.77.17062130xxx;
Thu, 25 Jan 2024 12:03:33 -0800 (PST)
Return-Path: <>
Received: from xxx.com (xxx.com. [207.xxx.xxx.xxx])
by mx.google.com with ESMTPS id bi4-xxx0b00783c84e9ef8si590747qkb.206.xxx.01.xx.12.03xxx
for xxx.yyy@gmail.com
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Thu, 25 Jan 2024 12:03:33 -0800 (PST)
Received-SPF: none (google.com: xxx.com does not designate permitted sender hosts) client-ip=207.xxx.xxx.xxx;
Authentication-Results: mx.google.com;
dkim=pass header.i=@xxx.co.nz header.s=alpha header.b=biFVvXep;
arc=fail (signature failed);
spf=none (google.com: xxx.com does not designate permitted sender hosts) smtp.helo=xxx.com;
dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=xxx.co.nz
Received: from xxx.co.nz (xxx.co.nz [210.xxx.xxx.5x])
by xxx.com (Postfix) with ESMTP id 4DD66xxx8E3
for xxx@zzz.com; Thu, 25 Jan 2024 20:03:28 +0000 (UTC)
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zzz.com;
s=dkim; t=1706213008;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:mime-version:mime-version:content-type:content-type:
dkim-signature;

Die Frage ist also:

  1. Warum markiert Discourse abgewiesene E-Mails nicht als abgewiesen und wie kann ich das beheben?

Discourse verwendet den reply_key, um Bounces mit gesendeten E-Mails zu verknüpfen. Wenn Discourse E-Mails sendet, verwendet es den Wert von reply_by_email_address als SMTP-Envelope-Absender.

Sie müssen sicherstellen, dass Ihre reply_by_email_address einen {reply_key} enthält, damit Ihre Instanz die Bounces der richtigen gesendeten E-Mail zuordnen kann.

Hier auf Meta ist er beispielsweise auf incoming+%{reply_key}@meta.discoursemail.com gesetzt, und alles, was an diese Adresse gesendet wird, wird an diese Instanz geliefert.

1 „Gefällt mir“

Vielen Dank für die Antwort. Leider musste ich den reply_key aus der E-Mail-Antwort deaktivieren, da unser E-Mail-Relay-Server die +-Adressierung nicht erkennt. Gibt es eine andere Option?

1 „Gefällt mir“

Ihr E-Mail-Relay-Server sollte keine Rolle spielen, nur der Endserver, auf dem sich das Postfach befindet. E-Mail-Localparts sind für alle Zwischenserver undurchsichtig.

Ist es nicht Gmail gemäß:


Ich bin mir nicht sicher, ob wir einen anderen Mechanismus haben, um Bounces zuverlässig zu erkennen.

1 „Gefällt mir“

Um das zu verdeutlichen: Der Ziel-SMTP-Domain-Server, der die zurückgesendete E-Mail empfängt, erkennt die +-Adressierung nicht und leitet daher nur E-Mails basierend auf dem To-Feld an die Gmail-Adresse weiter, die von Discourse über POP abgerufen wird. Das bedeutet, wenn das To-Feld den reply_key enthält, wird diese E-Mail nicht an das von Discourse verwendete Gmail-Konto weitergeleitet.

Ich kann den reply_key also nicht in die E-Mail-Adresse einfügen, kann er woanders platziert werden? Im Betreff oder im Text oder irgendwo, wo Discourse ihn möglicherweise analysieren kann?

Es wäre eine große Hilfe, wenn Sie schreiben würden, was Sie tatsächlich für die Einstellungen verwenden, auch wenn diese leicht anonymisiert sind.

Sie sollten sich auch die Einstellung von alternative_reply_by_email_addresses ansehen.

Ich glaube nicht.

Wenn möglich, würde ich für Ihre Einrichtung etwas wie Folgendes empfehlen:

  • Setzen Sie reply_by_email_address auf inbound+%{reply_key}@forum.hostname
  • Konfigurieren Sie einen Mailserver, um E-Mails für forum.hostname zu empfangen und alle an the.gmail.account@gmail.com zuzustellen.

Hier muss der zwischengeschaltete Mailserver keine Plus-Adressierung verstehen, er muss nur alles für die Domäne weiterleiten.

Absolut\n\nE-Mail-Parsing-Einrichtung:\n\n

\n\n\nE-Mail-Versand-Einrichtung:\n\n\n\n\n\n- Die von Discourse gesendete E-Mail stammt von discourse@xxx.com über einen dedizierten Domain-SMTP-Server, der für Discourse eingerichtet ist (unter Verwendung der Discourse-Domain-Adresse).\n- Bei Antworten oder wenn eine E-Mail zurückprallt, leitet der Domain-SMTP-Server die E-Mail an discourse.xxxx@gmail.com weiter. Dieser Domain-SMTP-Server kann die +-Adressierung nicht erkennen. Wenn ich also den reply_key in die Antwort-E-Mail-Adresse aufnehme, wird er vom Domain-SMTP-Server verworfen. Ich kann nur Regeln einrichten, um separate/eindeutige eingehende E-Mail-Adressen weiterzuleiten.\n- Das Discourse-Forum greift dann per POP über GMail auf diese weitergeleiteten Antworten/zurückgesendeten E-Mails zu und parst sie.\n\nHilft das?

Ich verstehe, was Sie sagen. Leider kann ich aufgrund einer Einschränkung der SMTP-Serverregeln keine Weiterleitung für Subdomänen einrichten, sondern nur eine Weiterleitung für eindeutige To-E-Mail-IDs konfigurieren.

Ich habe hier jedoch eine Klärung – eher eine Diskrepanz in der Funktionsweise von Discourse:

  1. Wenn ein Benutzer auf einen E-Mail-Beitrag antwortet, kommt er korrekt an – Antworten scheinen auch ohne explizit konfigurierte {reply_key} perfekt zu funktionieren (siehe Screenshots oben).
  2. Wenn eine E-Mail jedoch zurückgesendet wird, kategorisiert Discourse sie unter Empfangen anstatt unter Zurückgesendet.
  3. Die Fehlerprotokolle zeigen, dass etwas in Discourse erkennt, dass es sich um eine zurückgesendete E-Mail handelt (siehe Fehlerprotokoll meines ersten Beitrags). Wenn also etwas in Discourse erkennt, dass es sich um eine zurückgesendete E-Mail handelt, warum wird sie dann nicht unter Zurückgesendet anstatt unter Empfangen angezeigt?

Warum wird also eine Antwort eines Benutzers auf einen Beitrag von Discourse korrekt verarbeitet, eine zurückgesendete E-Mail jedoch nicht (und es scheint auch eine Diskrepanz zwischen den Fehlerprotokollen und dem Dashboard für zurückgesendete E-Mails zu geben). Übersehe ich etwas in der Konfiguration?

Ich habe auch versucht, die Einstellungen für die Antwort-an-E-Mail-Adresse in Discourse auf discourse.xxx+%{reply_to}@gmail.com zu setzen, aber wenn die E-Mail dann zugestellt wird, scheint Gmail zu glauben, dass die Domain yyy.com (Discourse SMTP-Domain) versucht, die Gmail-Domain zu fälschen, und markiert sie als Spam. Es scheint, dass die Einstellung einer Antwort-an-Domain, die sich von der Absenderdomain unterscheidet, einen DMARC- und SPF-Fehler auslöst.

ARC-Authentication-Results: i=1; mx.google.com;
       spf=softfail (google.com: domain of transitioning discussion.xxx+verp-b9c40db917ca04993dd3433cc9748518@gmail.com does not designate y.y.y.y as permitted sender) smtp.mailfrom=discussion.xxx+verp-b9c40db917ca04993dd3433cc9748518@gmail.com;
       dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=yyy.com
Return-Path: <discussion.xxx+verp-b9c40db917ca04993dd3433cc9748518@gmail.com>

Sie haben find related posts with key deaktiviert (ich hoffe, Sie haben die Warnung gelesen), daher verwendet Discourse den in-reply-to-Mail-Header, um zu bestimmen, auf welches Thema/welchen Beitrag die Antwort sich beziehen soll.

Dies kann es nicht für Bounces tun – Discourse muss die spezifische Nachricht kennen, die gebounced ist, und diese Information ist nur an einer Stelle garantiert vorhanden – der To:-Adresse (die von der Envelope-From-Adresse der ursprünglichen Nachricht stammt).

Damit dies funktioniert, muss Discourse, wenn es eine Nachricht sendet, die Antwort von der Adresse erhalten, von der es gesendet wurde. Discourse sucht in der To:-Kopfzeile danach (nicht in der Envelope-To).

fälscht die Gmail-Domain

Wenn Sie E-Mails von einer Gmail-Adresse senden möchten, müssen Sie diese über deren Server senden. Aber das mögen sie nicht.

Es sieht nicht so aus, als hätten Sie DKIM für yyy.com konfiguriert; das sollten Sie tun. Wenn Sie das richtig machen, sollte DMARC erfolgreich sein.

2 „Gefällt mir“

Ja, es ist konfiguriert und die von Discourse über den SMTP-Server von yyy.com „gesendete“ E-Mail besteht SPF, DKIM und DMARC ohne Probleme (zumindest von der Seite „Test-E-Mail senden“ in der Admin-Konsole).

Dieses Problem tritt auf, wenn ich eine Gmail-Adresse als reply_by_email_address an eine gmail.com-Adresse statt an die yyy.com-Adresse setze. Gibt es etwas, das ich für diese Einrichtung tun kann, damit DMARC nicht fehlschlägt, wenn es auf eine Gmail-Adresse als reply_by_email_address gesetzt wird, während der ausgehende Server yyy.com bleibt?

Kann es nicht den Rest des Inhalts/der Anhänge in der zurückgesendeten E-Mail analysieren, um diese Informationen zu extrahieren, wenn es nicht das findet, was es an der „offensichtlichen“ Stelle benötigt (oder zumindest eine Option in den Einstellungen anbieten, dies mit den notwendigen Warnungen bezüglich Identitätsdiebstahl zu tun)?

DMARC-Ausrichtung schlägt fehl, da die reply_by_email_address in dieser Situation als Envelope-From-Adresse verwendet wird.

So ziemlich das einzige, was bei einer Rücksendung garantiert intakt bleibt, ist die Adresse.

Vielleicht die Betreffzeile, aber es wäre nicht praktikabel, diese Informationen dort zu platzieren.

Ich sehe, dass einige Systeme die ursprüngliche Nachricht als Anhang enthalten… es ist theoretisch möglich, dass wir Rücksendungen auf einen Anhang überprüfen könnten, um mehr Informationen zu erhalten, falls diese vorhanden sind.

Wenn ich das richtig verstehe, sollte die reply_by_email_address im Feld reply-to des von Discourse gesendeten Umschlags (von yyy.com) gesetzt werden. Wenn der Benutzer dann antwortet, antwortet er an die reply-to-E-Mail (gmail.com) und nicht an die ursprüngliche (yyy.com)-Adresse. Im Umschlag der E-Mail-Antwort sollte die from-Adresse die E-Mail-Adresse des Benutzers und die to-Adresse die gmail.com-Adresse sein.

Warum sollte die reply_by_email_address als from-Adresse verwendet werden?

Die reply_by_email_address wird nicht als Absenderadresse verwendet, sondern als Envelope-From, speziell damit Bounces funktionieren.

Hier ist ein Bild, das zeigt, wie jede Adresse verwendet wird. Die Adressen selbst sind spezifisch für unser Hosting, sollten aber für ein Beispiel ausreichend sein.

notification_email: notifications@hs1.discoursemail.com
reply_by_email_address: incoming+%{reply_key}@hs1.discoursemail.com

Eine Benachrichtigung:

Eine antwortbare Nachricht:

2 „Gefällt mir“

Danke. Das ist sehr hilfreich.

Also wird die reply_by_email_address im From-Header verwendet, damit sie bei einem Bounces an diese E-Mail-Adresse zurückkommt. Und dieselbe E-Mail-Adresse wird auch im Reply-To-Header gesetzt, wenn E-Mail-Antworten aktiviert sind.

Wenn mein obiges Verständnis korrekt ist, würde eine separate Einstellung (reply_to_email) für den reply-to-Header in Discourse das Problem mit dem DMARC-Fehler lösen. Bei Verwendung der yyy.com-Domain (aus reply_by_email_address entnommen) für das from beim Senden und gmail.com für das reply-to (aus einer neuen reply_to_email-Einstellung entnommen). Wenn die E-Mail zurückkommt, wird sie immer noch an die reply_by_email_address zurückgesendet, aber wenn der Benutzer antwortet, geht sie an reply_to_email.

Das ist die SMTP-envelope-from, nicht der From-Header. Der From-Header wird nicht für Bounces verwendet.

d.h. ① nicht ②:

Um DMARC zu bestehen, müssen entweder SPF (das die envelope-from in Kombination mit der sendenden IP validiert) oder DKIM (das den From-Header und die Prüfsummenfelder der Nachricht validiert) align haben.

Es scheint, als ob der Sinn dieser ganzen Übung darin besteht, eine “schöne” Reply-to-Adresse zu haben, an die die Benutzer antworten?

Sie wollen so etwas?

envelope-from: outgoing+12309847801923840923502389423@yyy.com
…
From: notifications@yyy.com
To: user@contoso.com
Reply-to: my_sweet_forum+12309847801923840923502389423@gmail.com

Sie müssen diese envelope-from so haben, sonst werden Bounces nicht funktionieren.

1 „Gefällt mir“

Ja, das ist richtig. Die Idee ist, dass sich die envelope-from-Adresse von der reply-to-Adresse unterscheidet.

Da die Domain der envelope-from-Adresse und die sendende IP übereinstimmen, sollte der SPF-Check erfolgreich sein, aber gleichzeitig kann die Antwort an GMail gehen, um Antworten zu verarbeiten, und wenn die E-Mail zurückkommt, geht sie zurück an den ursprünglichen Domain-Server, der den Bounce dann auch zurück an den GMail-Posteingang weiterleiten kann.

Es würde tatsächlich so aussehen:

envelope-from: outgoing@yyy.com
…
From: notifications@yyy.com
To: user@contoso.com
Reply-to: my_sweet_forum+12309847801923840923502389423@gmail.com

In meiner Konfiguration wird die ausgehende E-Mail kein VERP haben, da mein eingehender SMTP VERP nicht unterstützt (d. h. der Bounce hat keine VERP-Adresse), deshalb wird die reply-to-Adresse an GMail gesendet, da diese VERP unterstützt. Dies sollte keinen DMARC-Fehler verursachen, wie es derzeit der Fall ist.