Ajout d'un certificat TLS avec la configuration SMTP

Je tente d’utiliser mon propre serveur d’envoi exclusif pour envoyer des e-mails. J’exécute cette passerelle SMTP pour utiliser TLS, ce qui signifie que le client que j’utilise pour envoyer des e-mails nécessite un certificat. J’utilise un certificat auto-signé qui est très facilement configurable si j’utilise postfix/ssmtp pour l’envoi d’e-mails, mais je ne suis pas sûr de savoir comment utiliser un certificat personnalisé dans le client de messagerie de Discourse.

Pour avoir une idée rapide de la situation :

Scénario simple :
Discourse —envoie—e-mail—\u003e mailgun —envoie—e-mail—\u003e utilisateur

Mon scénario :
Discourse —envoie—e-mail—\u003e mon serveur exécutant la passerelle SMTP —relaye—e-mail—en—utilisant—l’API—AWS—SES—\u003e utilisateur

Merci.

Je souhaiterais corriger ma question. Je n’ai donc vraiment pas besoin d’ajouter de certificats pour que cela fonctionne, mais la communication en TLS échoue toujours. Si je le teste avec swaks, cela fonctionne parfaitement. Exemple de commande :

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

Vous pouvez utiliser directement le SMTP AWS SES pour cela. Pourquoi voulez-vous avoir un relais local ?

@itsbhanusharma AWS SES offre 60 000 e-mails par mois gratuitement et, à ma connaissance, ces appels d’e-mails doivent être effectués depuis une instance EC2 pour fonctionner, sinon ils sont facturés normalement. Mon instance Discourse est hébergée sur un droplet DigitalOcean. Je pourrais me tromper, mais c’est ainsi que je le comprends et c’est le raisonnement derrière cela.

Donc, même si votre API SES reçoit des e-mails depuis une adresse IP de DigitalOcean, cela entraînera des frais. Vous pourriez décider d’utiliser un autre service ou de déployer Exim sur une instance EC2 pour servir de passerelle entre votre instance DigitalOcean et AWS SES. Je ne pense pas que cela fonctionnera, mais vous pouvez essayer.

Cela devrait (en théorie, du moins) se dérouler ainsi :

  1. Discourse (sur DO) envoie des e-mails à l’adresse IP d’Exim sur EC2.
  2. EC2 relaie les e-mails reçus de DO vers SES.
  3. SES livre les e-mails à l’utilisateur final.

J’ai déjà résolu le problème de relais en exécutant un serveur SMTP local sur EC2 qui transfère ensuite la requête SMTP vers SES. Le problème est que Discourse échoue lors de la poignée de main TLS avec ce serveur SMTP, alors que des applications comme Postfix et Swaks fonctionnent parfaitement.

Résoudre ce problème devrait être aussi simple que d’utiliser le port 25 (sans chiffrement)

Existe-t-il un moyen de voir où cette poignée de main SMTP est gérée ? Comme une bibliothèque que Discourse utilise en Ruby en arrière-plan ? Je ne souhaite pas désactiver TLS ici.

Utilisez ensuite un certificat SSL valide (même Let’s Encrypt devrait fonctionner correctement)

L’utilisation d’un certificat valide de Let’s Encrypt n’a pas fonctionné pour une raison inconnue. Je ne sais pas pourquoi.
Mais après avoir ajouté ceci dans app.yaml, les emails fonctionnent désormais.

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Quelqu’un de plus compétent en SMTP pourrait expliquer pourquoi cela fonctionne, mais pour l’instant, je suis satisfait je pense.

Est-ce que cela finit par être moins cher que de simplement déplacer l’instance Discourse vers S3 ?

J’ai une instance EC2 à 5 $ qui tourne sur AWS et que j’utilise pour relayer plusieurs domaines. Migrer Discourse vers EC2 coûterait un peu plus cher par rapport à DigitalOcean, pas vraiment beaucoup, honnêtement (quelques dollars au total).

Mais le point clé est que même si je déplace Discourse vers EC2, j’aurais toujours besoin de ce service de relais pour prendre en charge les autres droplets que j’ai sur DO pour les autres domaines que je possède. Alors pourquoi ne pas simplement corriger Discourse :slight_smile:

Eh bien, de votre propre aveu, Discourse n’est pas défectueux ; il interagit parfaitement avec SES.

Vous faites cela pour contourner une restriction de SES afin de relayer des e-mails gratuitement.

C’est vrai, mais Discourse n’a rien à voir avec le SES ici. Discourse communique avec un serveur SMTP, qui peut être n’importe quoi (actuellement, c’est un service de relais). Je me demandais comment postfix, swaks et autres fonctionnent parfaitement avec ce serveur SMTP (du même VPC DO) alors que Discourse ne fonctionne pas. Après avoir défini cette variable, cela fonctionne cependant. Je voudrais toujours savoir quelle bibliothèque Discourse utilise pour la poignée de main SMTP afin que je puisse vérifier personnellement s’il y a quelque chose que nous pouvons améliorer dans Discourse.