Hinzufügen von TLS-Zertifikat zusammen mit SMTP-Konfiguration

Ich versuche, meinen eigenen nur zum Senden dienenden Server zum Versenden von E-Mails zu verwenden. Ich betreibe dieses SMTP-Gateway unter Verwendung von TLS, weshalb der Client, den ich zum Versenden von E-Mails verwende, ein Zertifikat benötigt. Ich verwende ein selbstsigniertes Zertifikat, das sehr einfach zu konfigurieren ist, wenn ich Postfix/ssmtp zum Versenden von E-Mails verwende, aber ich bin mir nicht sicher, wie ich ein benutzerdefiniertes Zertifikat im Discourse-E-Mail-Client verwenden kann.

Nur um sich kurz ein Bild zu machen:

Einfaches Szenario:
Discourse —sendet—E-Mail–\u003e Mailgun —sendet—E-Mail–\u003e Benutzer

Mein Szenario:
Discourse —sendet—E-Mail–\u003e mein Server mit SMTP-Gateway —leitet E-Mail über AWS SES-API weiter—\u003e Benutzer

Vielen Dank.

Ich möchte meine Frage korrigieren. Ich muss also tatsächlich keine Zertifikate hinzufügen, damit dies funktioniert, aber die TLS-Kommunikation schlägt dennoch fehl. Wenn ich es mit swaks teste, funktioniert es einwandfrei. Beispielbefehl:

swaks --to user@example.com --from me@example.com --auth PLAIN --auth-user myusername -tls -s smtp.somehost.com:2525

Sie können direkt das AWS SES SMTP verwenden, um dies zu erreichen. Warum möchten Sie einen lokalen Relay betreiben?

@itsbhanusharma AWS SES bietet 60.000 E-Mails pro Monat kostenlos an, und soweit ich weiß, müssen diese E-Mail-Anfragen von einer EC2-Instanz gestellt werden, damit sie kostenlos sind; andernfalls werden sie wie normale E-Mails berechnet. Meine Discourse-Instanz ist auf einem DigitalOcean-Droplet gehostet. Ich könnte mich irren, aber das ist mein Verständnis und die Begründung dafür.

Selbst wenn Ihre SES-API E-Mails von einer DigitalOcean-IP erhält, würde dies zu Kosten führen. Sie könnten sich dafür entscheiden, einen anderen Dienst zu nutzen oder Exim auf einer EC2-Instanz zu starten, um als Brücke zwischen Ihrem DO-Droplet und AWS SES zu dienen. Ich glaube nicht, dass es funktionieren wird, aber Sie können es versuchen.

Es sollte (theoretisch zumindest) so ablaufen:

  1. Discourse (auf DO) sendet E-Mails an die Exim-IP in EC2
  2. EC2 leitet die von DO empfangenen E-Mails an SES weiter
  3. SES liefert die E-Mails an den Endnutzer aus.

Ich habe das Relay-Problem bereits gelöst, indem ich einen lokalen SMTP-Server auf EC2 ausgeführt habe, der die SMTP-Anfragen schließlich an SES weiterleitet. Das Problem ist, dass Discourse beim TLS-Handshake mit diesem SMTP-Server fehlschlägt, während Anwendungen wie Postfix und Swaks problemlos funktionieren.

Die Lösung dafür sollte so einfach sein, wie Port 25 zu verwenden (ohne Verschlüsselung)

Gibt es eine Möglichkeit zu sehen, wo dieser SMTP-Handshake verarbeitet wird? Zum Beispiel welche Bibliothek Discourse im Hintergrund in Ruby verwendet? Ich möchte TLS hier nicht deaktivieren.

Verwenden Sie dann ein gültiges SSL-Zertifikat (selbst Let’s Encrypt sollte problemlos funktionieren)

Die Verwendung eines gültigen Zertifikats von Let’s Encrypt hat aus irgendeinem Grund nicht geholfen. Ich weiß nicht warum.
Aber nachdem ich dies in der app.yaml gesetzt habe, funktionieren E-Mails jetzt.

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Jemand mit mehr Wissen über SMTP könnte erklären, warum das funktioniert, aber ich bin vorerst zufrieden, denke ich.

Ist das am Ende günstiger als das Verschieben der Discourse-Instanz nach S3?

Ich habe eine 5 $ teure EC2-Instanz bei AWS laufen, die ich als Relay für mehrere Domains verwende. Den Umzug von Discourse auf EC2 wäre etwas teurer als bei DigitalOcean, aber ehrlich gesagt nicht viel (ein paar Dollar insgesamt).

Der Punkt ist jedoch: Selbst wenn ich Discourse auf EC2 verlege, bräuchte ich diesen Relay-Dienst weiterhin, um die restlichen Droplets zu unterstützen, die ich bei DO für andere Domains, die ich besitze, habe. Warum also nicht einfach Discourse reparieren :slight_smile:

Nun, deiner eigenen Aussage zufolge ist Discourse nicht defekt und funktioniert einwandfrei mit SES zusammen.

Du machst das, um eine SES-Beschränzung zu umgehen, um E-Mails kostenlos weiterzuleiten.

Das ist zwar richtig, aber Discourse hat hier nichts mit SES zu tun. Discourse kommuniziert mit einem SMTP-Server, der alles Mögliche sein kann (aktuell ist es ein Relay-Dienst). Ich habe mich gefragt, warum Postfix, Swaks und Co. problemlos mit diesem SMTP-Server (aus derselben DO-VPC) funktionieren, Discourse jedoch nicht. Nach dem Setzen dieser Variable funktioniert es zwar, aber ich würde gerne wissen, welche Bibliothek Discourse für den SMTP-Handshake verwendet, damit ich selbst prüfen kann, ob es etwas gibt, was wir in Discourse verbessern können.