Anpassen der Direkt-Lieferung Postfix-Konfiguration

Wenn Sie einen Mail-Empfangs-Container verwenden, der eine angepasste Postfix-Konfiguration erfordert, ist dieses Thema genau das Richtige für Sie. Hier werden die Schritte beschrieben, die erforderlich sind, um die Postfix-Konfigurationsvariablen in main.cf nach Ihren Wünschen einzustellen.

Postfix-Konfigurationsvariablen können über die Container-Umgebungsvariablen festgelegt werden. Jede Umgebungsvariable, die mit POSTCONF_ beginnt, setzt eine Postfix-Konfigurationsvariable, deren Name dem Rest des Variablennamens entspricht, auf den Wert der Umgebungsvariable. Wenn Sie beispielsweise die Umgebungsvariable POSTCONF_always_bcc auf bob@example.com setzen, wird Postfix so konfiguriert, dass always_bcc = bob@example.com gilt. Dadurch wird eine Kopie aller eingehenden Mails an Bob gesendet. Armer Bob.

Vorgehensweise

  1. Ermitteln Sie, welche Konfigurationsvariablen Sie setzen möchten und welche Werte Sie ihnen zuweisen wollen. Dies kann durch Lesen des ausführlichen Handbuchs, durch Empfehlungen in anderer Discourse-Dokumentation oder auf andere Weise geschehen.

  2. Stellen Sie eine SSH-Verbindung zu Ihrem Discourse-Server her, erhalten Sie root-Rechte und wechseln Sie in das Verzeichnis, in dem die gesamte discourse-docker-Konfiguration gespeichert ist:

    ssh ubuntu@192.0.2.42
    sudo -i
    cd /var/discourse
    
  3. Öffnen Sie containers/mail-receiver.yml in Ihrem bevorzugten Texteditor und scrollen Sie zum Abschnitt env: der Datei. Fügen Sie an geeigneter Stelle Einträge für die Variablen hinzu, die Sie hinzufügen möchten. Achten Sie darauf, nichts anderes zu verändern und die korrekte Einrückung beizubehalten. Wenn wir beispielsweise unsere always_bcc-Einstellung hinzufügen würden, könnte die Datei etwa so aussehen:

    env:
      LANG: en_US.UTF-8
      MAIL_DOMAIN: discourse.example.com
      DISCOURSE_BASE_URL: 'https://discourse.example.com'
      DISCOURSE_API_KEY: abcdefghijklmnop
      DISCOURSE_API_USERNAME: system
    
      POSTCONF_always_bcc: 'bob@example.com'
    

    Sobald Sie mit Ihren Änderungen zufrieden sind, speichern Sie die Datei und schließen Sie den Editor.

  4. Um die Konfiguration zu übernehmen, müssen Sie lediglich den mail-receiver-Container neu starten (ein rebuild ist nicht erforderlich):

    ./launcher restart mail-receiver
    

    Nach einer kurzen Verzögerung sollte der Container wieder laufen.

  5. Testen Sie Ihre Änderungen. Stellen Sie sicher, dass sowohl das, was Sie erreichen wollten, tatsächlich eingetreten ist, als auch dass nichts Unerwartetes geändert wurde.

Anhang: Hinzufügen von Dateien zum mail-receiver-Container

Viele Postfix-Konfigurationsparameter benötigen Zugriff auf „Datenbankdateien", die Schlüssel-Wert-Informationen bereitstellen, die Postfix verwendet, um Entscheidungen darüber zu treffen, wie mit Mails umgegangen wird. Wenn Sie sehen, dass ein Konfigurationsparameter einen Dateinamen akzeptiert, der wie hash:/some/file aussieht, haben Sie einen Anwendungsfall für Datenbankdateien gefunden.

Das Problem ist, dass Postfix innerhalb des Containers Zugriff auf diese Dateien haben muss, während es läuft. Das bedeutet, Sie müssen entweder diese Dateien in den Container kopieren oder (bevorzugt) diese Dateien in ein Verzeichnis auf dem Host-System legen und dieses Verzeichnis dann als Volume im Container einbinden. Diese Anweisungen beschreiben die zweite Methode.

Sobald Sie dieses Verfahren abgeschlossen haben, wird jede Datei, die Sie in /var/discourse/shared/mail-receiver/etc ablegen, sofort unter /etc/postfix/shared innerhalb des Containers sichtbar sein. Alle Änderungen, die Sie an diesen Dateien vornehmen, sind für Postfix sofort wirksam.

So gehen Sie vor:

  1. Wenn Sie nicht mehr als root auf Ihrem Discourse-Server angemeldet sind, melden Sie sich erneut an:

    ssh ubuntu@192.0.2.42
    sudo -i
    cd /var/discourse
    
  2. Öffnen Sie containers/mail-receiver.yml in Ihrem bevorzugten Texteditor und wechseln Sie diesmal zum Abschnitt volume:. Fügen Sie unter der vorhandenen Definition für das Verzeichnis /var/spool/postfix eine weitere hinzu, sodass Ihr volume-Abschnitt wie folgt aussieht:

    volumes:
      - volume:
          host: /var/discourse/shared/mail-receiver/postfix-spool
          guest: /var/spool/postfix
      - volume:
          host: /var/discourse/shared/mail-receiver/etc
          guest: /etc/postfix/shared
    

    Speichern Sie die Datei und schließen Sie den Editor.

  3. Um das neue Volume zu aktivieren, müssen Sie lediglich den mail-receiver-Container neu starten (ein rebuild ist nicht erforderlich):

    ./launcher restart mail-receiver
    

Alles erledigt!

10 „Gefällt mir“

Matt, do you think that could be possible to enable accounts like admin@domain or info@domain from this Postfix configuration?

I only need to have a couple of addresses for incoming e-mail and I have it working with Discourse but I can’t set accounts (their seem to be blocked by default even though messages are processed).

Thanks for all your guides related.

Ich habe gerade einen Test-Discourse-Dienst mit Digital Ocean und Mailgun für ausgehende E-Mails eingerichtet. Ich habe eine Domain mit einem geeigneten MX-Eintrag, der auf die Digital Ocean IP-Adresse verweist. Ausgehende und eingehende E-Mails funktionieren mit Discourse korrekt. Antworten auf Themen generieren ausgehende E-Mails an diejenigen, bei denen Benachrichtigungen aktiviert sind, und Testbenutzer können auf diese E-Mails antworten, und die Beiträge erscheinen in Discourse. Soweit alles gut.

Ich habe versucht, die Option POSTCONF_always_bcc: wie oben beschrieben hinzuzufügen, aber sie scheint nicht zu funktionieren – ich vermute, dass der ‘mail-receiver’-Teil von Discourse nicht in der Lage ist, die E-Mail ordnungsgemäß über Mailgun zu senden, obwohl der ‘app’-Teil den Benutzernamen und das Passwort des Mailgun-Servers enthält, aber ich habe keine Beispiele gesehen, wie diese Informationen in die mail-receiver-Einstellungen eingegeben werden können.

Ich weiß, dass die always_bcc-Option gelesen und angewendet wird, da ich, wenn ich eingebe:

./launcher enter mail-receiver

dann ausführe

mailq

Ich kann eine Testnachricht sehen, die ich gesendet habe und die in der Warteschlange versucht, zugestellt zu werden. In der Spalte „-Sender/Empfänger-------“ steht die Adresse, von der meine Testnachricht kam, die Worte „(unbekannter Mail-Transportfehler)“ und dann die E-Mail-Adresse, die ich in der always_bcc-Einstellung hatte.

Ich hatte gehofft, eingehende Nachrichten irgendwie zu filtern, so dass, wenn eine Nachricht an postmaster@mydomain oder admin@mydomain gesendet wurde, sie über Mailgun über das öffentliche Internet an meine Gmail-Adresse weitergeleitet würde und nicht zur Verarbeitung an Discourse gesendet würde. Dies ist vielleicht das, was Benutzer @satonotdead zu tun versucht hat.

Jeder Hinweis ist willkommen, wie das gemacht werden kann!

Hmm. Ja, zuerst müssen Sie den Mailgun Mail-Empfänger so konfigurieren, dass er eine Möglichkeit zur Zustellung von E-Mails hat, da er nichts über die Anmeldeinformationen oder den Transportmechanismus in app.yml weiß. Ich denke, Sie müssen eine vollständigere Konfiguration hinzufügen, wie im nächsten Abschnitt über das Mounten von Volumes angedeutet, dessen Details über den Rahmen dieses Dokuments hinausgehen.

Die einfache Lösung für „Wie gehe ich mit postmaster- und admin-E-Mails um?“ besteht darin, für jede eine Gruppe zu erstellen und jeden hinzuzufügen, der diese E-Mails erhalten soll, zu dieser Gruppe, und sie können diese als Gruppen-Nachrichten behandeln.

3 „Gefällt mir“

Meinten Sie „Mail-Empfänger“ statt Mailgun? So wie man dem „Mail-Empfänger“ beibringt, über das öffentliche Internet mit Mailgun zu sprechen und Anmeldeinformationen ordnungsgemäß weiterzugeben, um ihn zu bitten, die eigentlichen Zustellungen durchzuführen?

Ja. Entschuldigung dafür.

Nun ja, das oder auf irgendeine andere Weise den Mail-Receiver (d. h. Postfix) so konfigurieren, dass er E-Mails zustellt. Ich bin größtenteils der Meinung, dass man, wenn man weiß, wie das geht, es eher tun würde, anstatt den Mail-Receiver zu verwenden.

Eine andere Lösung wäre, einen Prozess <mail thing> zu haben, der die E-Mail für domain verarbeitet und den Rest an den Mail-Receiver weiterleitet, vielleicht unter einer anderen MX.

Nachdem ich diesen Abend damit verbracht habe, zahlreiche Kombinationen auszuprobieren, ist es mir gelungen, Postfix außerhalb der Container zu installieren, in denen Discourse läuft, und kann auf diese Weise E-Mails über Mailgun von der Kommandozeile aus senden. Daher habe ich Postfix erfolgreich für die Verwendung von Mailgun konfiguriert. Ich bin immer noch ratlos, wie ich die Einstellungen in den Mail-Receiver-Container bekomme, damit die Weiterleitung über Mailgun funktioniert. Ich bin sicher, dass es einen (einfachen!) Weg geben muss. Ich kann keine Protokolle finden, um herauszufinden, warum Nachrichten in der Mail-Warteschlange feststecken. Container gab es nicht, als ich Linux das letzte Mal benutzte (vor einigen Jahren). Gibt es eine Möglichkeit, die Protokollierung zu aktivieren, damit ich sehen kann, welche Kommunikation Postfix zu versuchen versucht, um das Problem zu identifizieren? Konzeptionell möchte ich, dass admin@mydomain, sobald es eingegangen ist, über Mailgun direkt an mein persönliches Gmail-Konto gesendet wird, während category1@mydomain und category2@mydomain usw. lokal an Discourse weitergeleitet werden, um Beiträge zu erstellen.

2 „Gefällt mir“

Können wir den Mail-Empfänger außerhalb der Discourse-Container auf einem anderen VPS oder Rechenzentrum verwenden?

Die Idee ist, die IP-Adresse von Discourse für mehr Privatsphäre zu ändern und einen externen “Mail-Empfänger” zu verwenden, der mit dem Discourse-Forum funktioniert/authentifiziert.

Ja. Ich mache genau das. Ich lasse den Mail-Empfänger bei Digital Ocean laufen und Discourse auf Maschinen in einem anderen Rechenzentrum.

Kann mir jemand erklären, wie das geht? Dieser Typ verlangt Geld, nur um mir zu antworten.

Was ist Ihre Frage?

Es ist nichts Besonderes erforderlich, um den Mail-Empfänger auf einem beliebigen Server zu konfigurieren, solange dieser Docker und Zugriff auf die notwendigen Ports hat.

Ich habe den Mail-Empfänger eingerichtet, da er schnell und einfach ist. Wenn ich jedoch versuche, die E-Mails zu verarbeiten, erhalte ich eine 404-Meldung.

Meine Website ist ein Subdomain, z.B.: forum.site.com

Und im App-Mail-Empfänger habe ich dies für den Endpunkt:

DISCOURSE_MAIL_ENDPOINT: ‘http://forum.site.com/admin/email/handle_mail

Sollte ich Discourse auch neu erstellen?

Wenn Sie 404 erhalten, ist wahrscheinlich der API-Schlüssel falsch.

2 „Gefällt mir“

Es ist die Standard-API und gibt mir immer noch 404… ich schicke es dir in Google Talk, bitte überprüfe es.

1 „Gefällt mir“

SMTP-Banner konfigurieren?

MXtoolbox’s SuperTool meldet ein Problem mit der SMTP-Banner-Überprüfung.
image

Normalerweise sollte das EHLO-Banner mit der MAIL_DOMAIN übereinstimmen, die wiederum mit dem Reverse-DNS-Pointer (PTR-Eintrag) übereinstimmen soll. Wenn also mein mail-receiver unter discourse.example läuft, dann sollte POSTCONF_myhostname discourse.example sein.

Was ist der richtige Weg, das EHLO-Banner zu konfigurieren?

Meine erste Intuition war, zu versuchen, HOSTNAME in mail-receiver.yml zu setzen, damit es host-mail-receiver.localdomain in /etc/postfix/mail-receiver-environment.json ersetzt. Aber das ändert weder /etc/hostname noch myhostname in der Postfix-Konfiguration.

Ich bin versucht, POSTCONF_myhostname zu verwenden, aber ich befürchte, dass dies unerwünschte Nebenwirkungen haben wird, da $myhostname an mehreren Stellen verwendet wird und dann nicht mehr mit /etc/hostname übereinstimmt.

root@host-mail-receiver:/etc/postfix# postconf | grep myhostname
lmtp_lhlo_name = $myhostname
local_transport = local:$myhostname
milter_macro_daemon_name = $myhostname
myhostname = host-mail-receiver.localdomain
myorigin = $myhostname
smtp_helo_name = $myhostname
smtpd_proxy_ehlo = $myhostname
root@host-mail-receiver:/etc/postfix# cat /etc/hostname
host-mail-receiver

Discourse-setup fragt nach einer Einstellung. Ich kann mich nicht an den Namen erinnern und er ist auf meinem Handy schwer zu finden. Sie können sich den Quellcode ansehen oder ihn ausführen.

Die Postfix-Einstellung smtp_helo_name ändert den Namen, der im HELO- (oder EHLO-)Befehl angegeben wird, aber dies ist eine Einstellung für die ausgehende Zustellung, während das SMTP-Banner beim Empfangen von E-Mails gesendet wird. Der dort angegebene Standardhostname wird von myhostname übernommen, aber Sie können das Banner mit der Einstellung smtpd_banner so ändern, dass etwas anderes angezeigt wird.

1 „Gefällt mir“

Ich bin mir nicht sicher, ob das anderen helfen wird. Ich hatte ein ähnliches Problem und das hat mir geholfen zu erkennen, dass ich aus irgendeinem Grund den API-Schlüssel widerrufen hatte. Sobald ich den Widerruf rückgängig gemacht habe, funktionierte die eingehende E-Mail wieder.

Vielen Dank, dass Sie mir geholfen haben zu erkennen, dass es mit dem API-Schlüssel zusammenhing :slightly_smiling_face:

1 „Gefällt mir“

Hat sich seitdem vielleicht etwas geändert? Ich habe gerade festgestellt, dass das Hinzufügen eines POSTCONF_smtpd_banner-Wertes unter env: bei mehreren Neustarts absolut nicht übernommen wurde. Ich musste neu bauen (./launcher rebuild mail-receiver), damit es wirksam wurde.

Hallo zusammen,

Ich habe gerade eine Domain-Migration abgeschlossen (gemäß Change the domain name or rename your Discourse ), die einwandfrei verlaufen ist. Ich verwende jedoch den mail-receiver-Container mit MX-Einträgen für eingehende E-Mails an ein paar Kategorien…

Soweit ich sehen kann, kodiert die Standardkonfiguration des Containers sowohl die eingehende Domain als auch den Pfad zu den LetsEncrypt-Zertifikaten fest. Ist es möglich, zwei Domains zuzulassen, entweder in der Konfiguration oder über diese erweiterten Optionen?