Donc, si le test openssl fonctionne mais que le test de connexion exécuté par discourse-doctor échoue toujours avec ces paramètres, quelle est la prochaine étape ? Même si le test openssl réussit, ma connexion Discourse échoue toujours avec l’erreur 504 5.7.4 Type d’authentification non reconnu… Je suppose qu’il ne reconnaît pas la méthode d’authentification LOGIN. J’ai essayé d’ajouter DISCOURSE_SMTP_AUTHENTICATION: login au fichier app.yml, mais cela n’a pas aidé.
Pour info, voici ce que j’ai trouvé. Je suis entré dans l’image Docker et j’ai commencé à bidouiller le script lib/tasks/emails.rake et le fichier config/discourse.conf. Plusieurs heures plus tard, après avoir essayé toutes les combinaisons possibles de smtp.office365.com et .mail.protection.outlook.com avec AUTH login et AUTH plain, j’ai décommenté le bloc situé au-dessus du démarrage de STMP.
# Nous aimerions faire cela, mais Net::SMTP échoue avec starttls
#Net::SMTP.start(smtp[:address], smtp[:port]) do |s|
# s.starttls if !!smtp[:enable_starttls_auto] && s.capable_starttls?
# s.auth_login(smtp[:user_name], smtp[:password])
#end
L’exécution telle quelle a entraîné un délai d’expiration de lecture.
La modification suivante — appeler new plutôt que start — a permis un envoi réussi.
Net::SMTP.new(smtp[:address], smtp[:port]) do |s|
s.enable_starttls
s.auth_login(smtp[:user_name], smtp[:password])
end
C’est ma première expérience avec Ruby, rake et leurs amis. Je ne peux pas expliquer pourquoi cela fonctionne ou si c’est une « bonne chose » pour les cas généraux.
J.
Ah, et je n’ai jamais réussi à faire fonctionner my_domain.mail.protection.outlook.com, que ce soit sur le port 25 ou 587. Ce qui a fonctionné, c’est smtp.office365.com:587.
J’utilise socketlabs.com comme service de livraison d’e-mails et j’ai rencontré un problème similaire. Dans mon cas, la solution consistait à modifier lib/tasks/emails.rake comme suit :
Modifiez la ligne : Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password])
en Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])
Sans cette modification, DISCOURSE_SMTP_AUTHENTICATION: login n’est pas transmis au code SMTP de bas niveau.
Je n’ai pas testé si le code modifié fonctionne toujours avec d’autres méthodes d’authentification, mais cela résout le problème pour l’authentification par connexion.
Je peux confirmer que l’ajout de smtp[:authentication]
à l’appel Net::SMTP.start et la définition de DISCOURSE_SMTP_AUTHENTICATION: login
dans app.yml résolvent le problème pour la page de test des e-mails.
Je pense que les e-mails réguliers sont envoyés via la bibliothèque mail, et que la définition de DISCOURSE_SMTP_AUTHENTICATION: login
dans app.yml suffit pour que la bibliothèque fonctionne correctement.
Néanmoins, je suis d’avis que lib/tasks/emails.rake devrait être corrigé pour utiliser le paramètre DISCOURSE_SMTP_AUTHENTICATION. Cela éviterait certains débogages inutiles.
En guise de mise à jour générale sur ce problème, Microsoft est en train de supprimer l’authentification héritée pour SMTP et POP3, ce qui va compliquer les choses si vous utilisez O365 comme fournisseur de messagerie. La stratégie par défaut appliquée actuellement interdit l’authentification SMTP, et vous devez l’activer pour chaque boîte aux lettres. J’espère que cela vous sera utile — j’ai passé hier matin à me frapper la tête contre un mur à cause de cela.
C’est vraiment dommage pour POP en particulier, car la configuration de la réception des courriers va devenir beaucoup plus difficile à moins que Discourse n’ajoute le support IMAP pour les boîtes aux lettres entrantes.
Il existe une solution simple pour les courriels entrants qui inclut un conteneur pour les recevoir. Elle s’appelait autrefois « simple », mais quelqu’un a contesté ce nom et elle a été renommée. Je ne parviens plus à la retrouver.
Bon, en tout cas, l’exécution de votre propre serveur de messagerie devrait être considérée comme une solution de dernier recours. Je pense qu’il s’agissait de « livraison directe », essayez de rechercher ce terme.