لست متأكدًا بالضبط أين يجب نشر هذا، ولكني أتساءل عما إذا كان أي شخص آخر يواجه هذا. لقد اتبعت دليل التثبيت الرسمي باستخدام DigitalOcean و Mailgun. ولكن لاحظت مؤخرًا أن لدي الكثير من استثناءات المهمة Jobs::UserEmail وغير قادر على إرسال رسائل بريد إلكتروني تجريبية.
سجلات الأخطاء
Message (20584 copies reported)
Job exception: execution expired
Backtrace
/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'
لم أتمكن من معرفة سبب المشكلة، لأنه لم يتم تغيير أي إعدادات، نسختي محدثة، وحساب Mailgun الخاص بي ضمن حدود الاستخدام المجاني. لذلك، قمت بإنشاء تذكرة دعم مع DigitalOcean لأنني اعتقدت أنهم ربما قاموا بحظر المنفذ 587، وقد تلقيت ردًا قصيرًا يفيد بأنهم فرضوا قيودًا على حركة مرور SMTP وأنهم يوصون باستخدام شريكهم SendGrid.
بريد DigitalOcean الإلكتروني
نتفهم أن لديك مخاوف بشأن قيود SMTP المفروضة على حسابك. DigitalOcean ليس مضيف بريد إلكتروني مخصص، وإيقاف البريد العشوائي هو معركة مستمرة. لهذا السبب، تم فرض قيود على جميع الحسابات.
نود أيضًا تقديم بعض الخلفية الإضافية حول هذه المشكلة. نظرًا لأن عناوين IP في البيئات السحابية يتم استخدامها وإعادتها إلى المجمعات المتاحة بشكل متكرر، فإنها تعتبر ديناميكية وغير جديرة بالثقة. على سبيل المثال، يتم تعيين عنوان IP لك حاليًا وأنت مستخدم بريد إلكتروني مسؤول. تتبع جميع أفضل الممارسات للبريد ولا ترسل أبدًا بريدًا عشوائيًا أو غير مرغوب فيه. لاحقًا، عندما لم تعد بحاجة إلى هذا الـ Droplet، تقوم بتدميره ويصبح عنوان IP متاحًا للمستخدم آخر في DigitalOcean. يستغل هذا المستخدم الفرصة لإرسال حجم كبير من البريد العشوائي قبل أن يتخذ فريق الأمان لدينا إجراءً بشأن الحساب المخالف.
لا يمكن لموفري البريد مثل Gmail و Microsoft وغيرهم تحديد ما إذا كان البريد الوارد من عنوان IP شرعيًا أم لا حتى يكتسب سمعة سيئة. بحلول ذلك الوقت، كان الضرر قد حدث بالفعل. من الأسلم ببساطة حظر جميع رسائل البريد الإلكتروني الواردة من منصات، مثل مزودي خدمة الإنترنت وبيئات الاستضافة السحابية، حيث يتم تعيين عناوين IP ديناميكيًا وهي محفوفة بالمخاطر بطبيعتها.
بينما يقلل هذا من الوسائل المتاحة للمرسلين العشوائيين، فإنه يؤثر أيضًا على المستخدمين الشرعيين. يعمل فريق عمليات الإساءة لدينا مع SBLs لإزالة عناوين IP من القوائم السوداء. بسبب هذا، نقوم بتقييد حركة مرور SMTP عبر منصة DigitalOcean. هذا يعني أننا غير قادرين على إزالة قيد SMTP المفروض على حسابك.
نتفهم أن سير عملك قد يتطلب احتياجات البريد الإلكتروني. كحل لهذا القيد، عقدنا شراكة مع SendGrid لتقديم حل أفضل لجميع عملائنا حيث لن تحتاج إلى القلق بشأن سمعة IP والقوائم السوداء. يمكنك قراءة المزيد عن هذا في مقالنا هنا. من خلال SendGrid، ستتمكن من إرسال 100 بريد إلكتروني مجاني يوميًا وإذا كان متطلبك يتجاوز المستوى المجاني، فلا تتردد في التواصل مع دعم SendGrid لاختيار خطة أفضل لتلبية متطلباتك.
يسعدنا دائمًا المساعدة إذا كانت لديك أسئلة إضافية، لذا لا تتردد في التواصل معنا.
----
هذا رد آلي للمساعدة في تسريع الخدمة من خلال الحصول على جميع المعلومات التي نحتاجها لمساعدتك. يجب عليك الرد على هذا البريد الإلكتروني للحصول على مزيد من المساعدة.
فريق دعم DigitalOcean
هل واجه أي شخص آخر هذه المشكلة العشوائية؟ بالتأكيد لا أريد أن أضطر إلى التبديل إلى SendGrid دون سبب وجيه.
تعديل…
لاحظت للتو هذا الموضوع Looks like DO is disabling Smtp in their Discourse hosting plans لذلك يبدو أن أي شخص يستخدم DigitalOcean قد يكون في ورطة.
