Je ne suis pas sûr exactement où poster ceci, mais je me demande si d’autres personnes ont rencontré ce problème. J’ai suivi le guide d’installation officiel en utilisant DigitalOcean et Mailgun. Mais j’ai récemment remarqué que j’ai beaucoup d’exceptions de tâches Jobs::UserEmail et que je ne parviens pas à envoyer d’e-mails de test.
Journaux d'erreurs
Message (20584 copies signalées)
Exception de tâche : expiration de l'exécution
Trace
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:663:in `initialize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:663:in `open'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:663:in `tcp_socket'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:672:in `block in do_start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/timeout-0.4.3/lib/timeout.rb:185:in `block in timeout'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/timeout-0.4.3/lib/timeout.rb:192:in `timeout'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:671:in `do_start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:642:in `start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/message.rb:269:in `deliver!'
/usr/local/lib/ruby/3.3.0/delegate.rb:87:in `method_missing'
/var/www/discourse/lib/email/sender.rb:296: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/app/jobs/base.rb:316:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:220:in `execute_job'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:185:in `block (4 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:180:in `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job/interrupt_handler.rb:9:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:26:in `track'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:134:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:173:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:184:in `block (3 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:145:in `block (6 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_retry.rb:118:in `local'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:144:in `block (5 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/config.rb:39:in `block in <class:Config>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:139:in `block (4 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:281:in `stats'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:134:in `block (3 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_logger.rb:15:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:133:in `block (2 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_retry.rb:85:in `global'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:132:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_logger.rb:40:in `prepare'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:131:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:183:in `block (2 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:86:in `process_one'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:76:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/component.rb:10:in `watchdog'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/component.rb:19:in `block in safe_thread'
Je n’ai pas pu déterminer la cause du problème, car aucun paramètre n’a été modifié, mon instance est à jour et mon compte Mailgun est bien dans la limite d’utilisation du niveau gratuit. Par conséquent, j’ai créé un ticket de support auprès de DigitalOcean car je pensais qu’ils avaient peut-être bloqué le port 587, et j’ai essentiellement reçu une réponse courte indiquant qu’ils avaient imposé des restrictions sur le trafic SMTP et qu’ils recommandaient d’utiliser leur partenaire SendGrid.
E-mail de DigitalOcean
Nous comprenons que vous ayez des préoccupations concernant les restrictions SMTP en place sur votre compte. DigitalOcean n’est pas un hébergeur d’e-mails dédié et la lutte contre le spam est un combat constant. Pour cette raison, des restrictions ont été imposées à tous les comptes.
Nous aimerions également fournir un peu plus de contexte sur ce problème. Étant donné que les adresses IP dans les environnements cloud sont utilisées et rendues aux pools disponibles très fréquemment, elles sont considérées comme dynamiques et peu fiables. Par exemple, vous vous voyez attribuer une adresse IP et vous êtes un utilisateur d’e-mails responsable. Vous suivez toutes les meilleures pratiques pour les e-mails et n’envoyez jamais de spam ou de courrier non sollicité. Plus tard, lorsque vous n’avez plus besoin de ce Droplet, vous le détruisez et l’adresse IP est libre d’être attribuée à un autre utilisateur de DigitalOcean. Cet utilisateur profite de l’occasion pour envoyer un grand volume de spam avant que notre équipe de sécurité n’intervienne sur le compte fautif.
Les fournisseurs de messagerie comme Gmail, Microsoft et d’autres ne peuvent pas déterminer si les e-mails provenant d’une adresse IP sont légitimes ou non tant qu’elle n’a pas acquis une mauvaise réputation. À ce moment-là, les dégâts sont déjà faits. Il est plus sûr de simplement bloquer tous les e-mails provenant de plateformes, comme les fournisseurs de services Internet et les environnements d’hébergement cloud, où les adresses IP sont attribuées dynamiquement et intrinsèquement risquées.
Bien que cela réduise les voies dont disposent les spammeurs, cela impacte également les utilisateurs légitimes. Notre équipe des opérations d’abus travaille avec les SBL pour faire déréférencer les adresses IP. Pour cette raison, nous restreignons le trafic SMTP sur la plateforme DigitalOcean. Cela signifie que nous ne pouvons pas supprimer la restriction SMTP qui est placée sur votre compte.
Nous comprenons que votre flux de travail puisse avoir des besoins en matière d’e-mails. Comme solution à cette restriction, nous nous sommes associés à SendGrid pour offrir à tous nos clients une meilleure solution où vous n’aurez pas à vous soucier de la réputation des IP et du blacklisting. Vous pouvez en savoir plus à ce sujet dans notre article ici. Via SendGrid, vous pourrez envoyer 100 e-mails gratuits par jour et si votre besoin dépasse le niveau gratuit, n’hésitez pas à contacter le support SendGrid pour opter pour un meilleur plan répondant à vos besoins.
Nous sommes toujours heureux de vous aider si vous avez des questions supplémentaires, alors n’hésitez pas à nous contacter.
----
Ceci est une réponse automatisée pour aider à accélérer le service en obtenant toutes les informations dont nous avons besoin pour vous aider. Vous devez répondre à cet e-mail pour obtenir une assistance supplémentaire.
Équipe de support DigitalOcean
Quelqu’un d’autre a-t-il rencontré ce problème aléatoire ? Je ne veux certainement pas être obligé de passer à SendGrid sans aucune bonne raison.
Modifier…
Je viens de remarquer ce sujet Looks like DO is disabling Smtp in their Discourse hosting plans, il semble donc que toute personne utilisant DigitalOcean pourrait être dans le pétrin.
