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.
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:
@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:
Discourse (auf DO) sendet E-Mails an die Exim-IP in EC2
EC2 leitet die von DO empfangenen E-Mails an SES weiter
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.
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.
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.
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
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.