Problèmes d'envoi de courrier au relais SMTP

Bonjour,
nous rencontrons des problèmes pour envoyer des e-mails via un relais SMTP ne nécessitant ni nom d’utilisateur ni mot de passe. Je suis capable d’envoyer des e-mails au relais en utilisant mailx / sendmail.
Voici les paramètres.

 DISCOURSE_SMTP_ADDRESS: xyz.example.com (obfusqué)
 DISCOURSE_SMTP_PORT: 587
 DISCOURSE_SMTP_AUTHENTICATION: plain

Ce que je reçois en retour, lorsque j’utilise le discourse_doctor, génère cette erreur.

Net::ReadTimeout

Il me semble que le message SMTP envoyé est mal formé car nous envoyons des choses, mais nous ne recevons rien en retour sur le port 587. Ceci est prouvable avec une trace Wireshark.

Pouvez-vous s’il vous plaît détailler comment activer une journalisation plus détaillée ou un débogage supplémentaire afin que nous puissions analyser davantage le problème ? Les journaux normaux ne me disent rien. J’ai trouvé une trace de pile, mais je ne suis pas un développeur Ruby et je ne peux pas l’interpréter.

/usr/local/lib/ruby/3.2.0/net/protocol.rb:229:in `rbuf_fill'

/usr/local/lib/ruby/3.2.0/net/protocol.rb:199:in `readuntil'

/usr/local/lib/ruby/3.2.0/net/protocol.rb:209:in `readline'

net-smtp-0.3.3/lib/net/smtp.rb:1057:in `recv_response'

net-smtp-0.3.3/lib/net/smtp.rb:659:in `block in do_start'

net-smtp-0.3.3/lib/net/smtp.rb:1067:in `critical'

net-smtp-0.3.3/lib/net/smtp.rb:659:in `do_start'

net-smtp-0.3.3/lib/net/smtp.rb:611:in `start'

/var/www/discourse/vendor/bundle/ruby/3.2.0/bundler/gems/mail-5b700fc95ee6/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'

/var/www/discourse/vendor/bundle/ruby/3.2.0/bundler/gems/mail-5b700fc95ee6/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'

/var/www/discourse/vendor/bundle/ruby/3.2.0/bundler/gems/mail-5b700fc95ee6/lib/mail/message.rb:269:in `deliver!'

/usr/local/lib/ruby/3.2.0/delegate.rb:87:in `method_missing'

/var/www/discourse/lib/email/sender.rb:286:in `send'

/var/www/discourse/app/jobs/regular/user_email.rb:79:in `send_user_email'

/var/www/discourse/app/jobs/regular/user_email.rb:39:in `execute'

/var/www/discourse/plugins/chat/lib/chat/user_email_extension.rb:6:in `execute'

/var/www/discourse/app/jobs/base.rb:249:in `block (2 levels) in perform'

rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in `with_connection'

/var/www/discourse/app/jobs/base.rb:236:in `block in perform'

/var/www/discourse/app/jobs/base.rb:232:in `each'

/var/www/discourse/app/jobs/base.rb:232:in `perform'

sidekiq-6.5.8/lib/sidekiq/processor.rb:202:in `execute_job'

sidekiq-6.5.8/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'

/var/www/discourse/lib/sidekiq/pausable.rb:134:in `call'

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:182:in `invoke'

sidekiq-6.5.8/lib/sidekiq/processor.rb:169:in `block in process'

sidekiq-6.5.8/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq/job_retry.rb:113:in `local'

sidekiq-6.5.8/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'

sidekiq-6.5.8/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq/processor.rb:263:in `stats'

sidekiq-6.5.8/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq/job_logger.rb:13:in `call'

sidekiq-6.5.8/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq/job_retry.rb:80:in `global'

sidekiq-6.5.8/lib/sidekiq/processor.rb:124:in `block in dispatch'

sidekiq-6.5.8/lib/sidekiq/job_logger.rb:39:in `prepare'

sidekiq-6.5.8/lib/sidekiq/processor.rb:123:in `dispatch'

sidekiq-6.5.8/lib/sidekiq/processor.rb:168:in `process'

sidekiq-6.5.8/lib/sidekiq/processor.rb:78:in `process_one'

sidekiq-6.5.8/lib/sidekiq/processor.rb:68:in `run'

sidekiq-6.5.8/lib/sidekiq/component.rb:8:in `watchdog'

sidekiq-6.5.8/lib/sidekiq/component.rb:17:in `block in safe_thread'

J’ai rétrogradé l’application à la dernière version stable, ce qui n’a pas résolu ce problème. la personne qui travaillait sur cela avant est en congés, donc je ne peux pas dire à quelle version c’était avant la dernière mise à jour. J’ai également remarqué qu’il y avait eu des modifications récentes du code dans le domaine de la messagerie. peut-être des problèmes là-bas ?

Merci

1 « J'aime »

Vous rencontrez peut-être des délais d’attente dans votre moteur de messagerie, cela a été mentionné dans un autre sujet récent. Postfix a apparemment un délai d’attente de 5 secondes par défaut.

Il m’a fallu plusieurs jours de casse-tête pour que les réponses et les publications par e-mail fonctionnent, beaucoup de petites choses à régler correctement à la fois dans Discourse et sur votre serveur de messagerie, y compris les paramètres du serveur de messagerie et les paramètres du pare-feu.

Et je n’ai pas encore commencé à traiter les problèmes de serveur de messagerie, en particulier pour être mis sur liste blanche par plusieurs fournisseurs d’accès Internet. J’ai SPF et DKIM qui fonctionnent.

Merci pour la réponse, oui, mais je cherche quelque chose qui m’indique quel est le problème. C’est délicat car la trace wireshark montre que l’e-mail est envoyé, mais aucune réponse n’est donnée. L’e-mail normal utilisant Linux sendmail fonctionne sans problème. SPF et DKIM sont également configurés sur le domaine respectif. Je suis capable de reproduire le problème dans la console rails.

message = TestMailer.send_test(“ycxi@examle.com”)
Email::Sender.new(message, :test_message).send

Je ne suis pas du tout un expert en ruby, je vais voir si je peux obtenir des journaux plus détaillés qu’une trace de pile :

[5] pry(main)> wtf?
Exception: Net::ReadTimeout: Net::ReadTimeout

nous avons résolu un problème similaire en augmentant les seuils de délai d’attente SMTP dans le fichier app.yml - en référence à ce sujet :

Comment le fichier app.yml a été modifié :
image

Après avoir modifié le fichier yaml, l’application a été reconstruite :
sudo ./launcher destroy app && sudo ./launcher start app

La modification est reflétée dans l’interface graphique