فشل اختبار البريد في discourse-doctor

أحاول استكشاف مشكلات SMTP باستخدام ./discourse-doctor

أقرب مشكلة ذات صلة وجدتها هي Yet other SMTP 587 port email various errors.
قبل تنفيذ الاقتراحات، واجهت مهلة زمنية ثابتة.

بعد التكوين:

DISCOURSE_SMTP_FORCE_TLS: true
DISCOURSE_SMTP_ENABLE_START_TLS: false

أحصل على ما يلي من discourse-doctor:

==================== MAIL TEST ====================
For a robust test, get an address from http://www.mail-tester.com/
Or just send a test message to yourself.
Email address for mail test? ('n' to skip) [admin@burlyqna.org]:
Sending mail to admin@burlyqna.org. . .
Testing sending to admin@burlyqna.org using smtp.mailfence.com:465, username:philion@mailfence.com with plain auth.
SMTP server connection successful.
Sending to admin@burlyqna.org. . .
Sending mail failed.
end of file reached

انظر: http://talk.burlyqna.org/NjdhMDAwYTk4NmM3MmM1.txt

أنا قادر على التحقق خارجيًا من تكوين خادم SMTP باستخدام:

swaks --to philion@gmail.com --from admin@burlyqna.org --server smtp.mailfence.com:465 --auth LOGIN --tlsc --auth-user philion@mailfence.com

أي أدلة حول كيف SMTP server connection successful. ولكن Sending mail failed.؟

شكراً جزيلاً،
بول

إعجاب واحد (1)

هل يجب استخدام المنفذ 587 لـ TLS؟

أود أن أجرب إضافة puts error.backtrace (أو ما شابه) بعد

وإعادة تشغيل discourse-doctor.

إعجاب واحد (1)

هذا ما توصل إليه الرد التلقائي الخاص بنا، أعتقد أن تجربة نطاق smtp تستحق المحاولة.

إعجاب واحد (1)

توماس،

هناك الكثير من النقاش حول 465 في منتديات الدعم. بناءً على قراءتي، يبدو أن Discourse يقوم بالكثير من الافتراضات حول SSL و TLS عبر SMTP، وهناك عدد قليل من متغيرات البيئة التي تتحكم في السلوكيات التفصيلية.
ومع ذلك، نظرًا لعدد الأخطاء المبلغ عنها والأسئلة ذات الصلة في هذه المنتديات، لدي انطباع قوي بأن هذه الإعدادات موثقة بشكل سيء ويصعب استخدامها. وبالنظر إلى مشاكل مماثلة تعود إلى عام 2017، كانت هذه مشكلة لسنوات عديدة الآن.
يمكن أن تكشف عمليات البحث عن “port 465” أو “Net::ReadTimeout smtp” عن قائمة طويلة من المشكلات المماثلة.

سأجرب ذلك. شكراً لك!

توماس،

أحاول العثور على هذا الملف في بناء دوكر، ولا أستطيع. أرى أنه مغلف في حاوية، لكنني استنسخت discourse/discourse_docker وليس discourse/discourse.

عندما أحاول الدخول إلى التطبيق باستخدام launcher enter app، لا توجد طريقة لتعديل هذا الملف أو تثبيت vi.

لا يمكنني العثور على أي وثائق أو علامات لتشغيل ./discourse-doctor مع تشغيل سجلات التصحيح.

يفشل بنفس الطريقة: لا يمكن إرسال البريد الإلكتروني، ويبلغ ./discourse-doctor عن نفس الخطأ.

تم تحديث app.yml كما هو مقترح، وأعدت بناء التطبيق (بدون بريد إلكتروني)، وجربت ./discourse-doctor وحصلت على نفس رسالة الخطأ.

./launcher enter app
sudo apt update && sudo apt install neovim -y

يجب أن يساعد.

شكرًا! لقد أصبحت متقدمًا في السن لدرجة أنني لا أستطيع تذكر “sudo apt install vi”. يجب أن أتذكر أنه يسمى neovim الآن.

بالنظر إلى التغيير المقترح لتفريغ تتبع المكدس، أقدم: http://talk.burlyqna.org/ODgyZjg5Y2QyMTU1ZmEx.txt

المقتطف ذو الصلة:

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:237:in `rbuf_fill'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:199:in `readuntil'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:209:in `readline'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1017:in `recv_response'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1008:in `block in getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1027:in `critical'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1006:in `getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:986:in `quit'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:732:in `do_finish'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `ensure in start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645: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'

يبدو أن الطرف الآخر قد قطع الاتصال.

بالمناسبة: http://talk.burlyqna.org/NjdhMDAwYTk4NmM3MmM1.txt لم يعد متاحًا

إعجاب واحد (1)

هل يتم الاحتفاظ بملفات السجل هذه عند إعادة البناء؟

لقد قمت بتحديث كلمات المرور لإزالة الرموز، وانتظرت تأخير انتشار مصادقة SMTP (وقت كافٍ لإعداد الغداء)، وتأكدت من بيانات الاعتماد الصحيحة لإرسال البريد الإلكتروني بشكل صحيح باستخدام swaks، و…
نفس الخطأ.
لاحظت أن إعادة البناء تزيل تفريغ تتبع المكدس، لذا سأضيفه مرة أخرى وأحاول ./launcher destroy app && ./launcher start app

إعجاب واحد (1)

تم تثبيت تتبع التصحيح، وتم تشغيل الطبيب:
http://talk.burlyqna.org/NWQ5MjBlMTIwN2JiNGNl.txt

==================== اختبار البريد ====================
لإجراء اختبار قوي، احصل على عنوان من http://www.mail-tester.com/
أو فقط أرسل رسالة اختبار إلى نفسك.
عنوان البريد الإلكتروني لاختبار البريد؟ ('n' لتخطي) [admin@burlyqna.org]:
إرسال بريد إلى admin@burlyqna.org. . .
اختبار الإرسال إلى admin@burlyqna.org باستخدام smtp.mailfence.com:465، اسم المستخدم: philion مع مصادقة عادية.
تم الاتصال بنجاح بخادم SMTP.
إرسال إلى admin@burlyqna.org. . .
فشل إرسال البريد.
نهاية الملف تم الوصول إليها
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:237:in `rbuf_fill'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:199:in `readuntil'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:209:in `readline'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1017:in `recv_response'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1008:in `block in getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1027:in `critical'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1006:in `getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:986:in `quit'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:732:in `do_finish'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `ensure in start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645: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!'

هل حاولت استخدام بريدك الإلكتروني بالكامل كاسم تسجيل دخول؟

تم تحديث app.yml لاستخدام البريد الإلكتروني الكامل كمستخدم، وتم إعادة النشر باستخدام ./launcher destroy app && ./launcher start app.

نفس الخطأ: http://talk.burlyqna.org/ZDg1YWE1YTA2YWU1Zjhj.txt

لقد أدى التدمير والبدء أيضًا إلى مسح التصحيح، لكنني سأفترض نفس المشكلة:

case rv = @io.read_nonblock(BUFSIZE, tmp, exception: false)

يعيد قيمة فارغة (nil)، وهذا يؤدي إلى استجابة EOF وغير/خطأ.

بعد الكثير من الاختبارات، والكثير من المساعدة من @thoka، أقدم الملخص التالي:

أنا قادر على تشغيل اختبارات SMTP باستخدام نفس بيانات الاعتماد التي قدمتها لـ container/app.yml والتي تعمل مع كل من swaks (Swaks - Swiss Army Knife for SMTP) ورمز Ruby النموذجي الذي قدمه @thoka (انظر أدناه).

هذه تعمل باستمرار. ومع ذلك، فإن محاولة إعداد خادم Discourse (الذي لا يمكنه إرسال البريد الإلكتروني الأولي للمستخدم المسؤول) أو استخدام روبوت discourse-doctor يؤدي إلى فشل البريد الإلكتروني:

==================== MAIL TEST ====================
For a robust test, get an address from http://www.mail-tester.com/
Or just send a test message to yourself.
Email address for mail test? ('n' to skip) [admin@burlyqna.org]:
Sending mail to admin@burlyqna.org. . .
Testing sending to admin@burlyqna.org using smtp.mailfence.com:465, username:xxx@mailfence.com with plain auth.
SMTP server connection successful.
Sending to admin@burlyqna.org. . .
Sending mail failed.
end of file reached

يبدو أن هذا فشل في تكوين البروتوكول، حيث يمكنني إرسال رسائل بريد إلكتروني تجريبية باستخدام أدوات Ruby القياسية:

require 'mail'

SMTP_SERVER = 'smtp.mailfence.com'
SMTP_PORT = 465
USERNAME = 'xyz'
PASSWORD = '...'

FROM = 'admin@burlyqna.org'
TO = 'testing@gmail.com'
SUBJECT = 'Test from Ruby'

BODY = "Hello,\n\nThis is a test email sent from Ruby over a SSL-secured connection.\n\nBest regards!"

Mail.defaults do
  delivery_method :smtp, {
    address: SMTP_SERVER,
    port: SMTP_PORT,
    user_name: USERNAME,
    password: PASSWORD,
    domain: "burlyqna.org",
    enable_starttls_auto: :false,
    authentication: :plain,
    ssl: true,
  }
end

begin
  puts 'Sending email...'
  puts "SMTP_SERVER: #{SMTP_SERVER}"
  puts "SMTP_PORT: #{SMTP_PORT}"
  puts "USERNAME: #{USERNAME}"
  puts "PASSWORD: #{PASSWORD}"
  puts "FROM: #{FROM}"
  puts "TO: #{TO}"

  mail = Mail.new do
    to TO
    from FROM
    subject SUBJECT
    body BODY
  end

  mail.deliver!
end

إعدادات SMTP الحالية في ملف app.yml الخاص بي هي:

DISCOURSE_SMTP_ADDRESS: smtp.mailfence.com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: xxx@mailfence.com
DISCOURSE_SMTP_PASSWORD: '...'
DISCOURSE_SMTP_FORCE_TLS: true                   # https://meta.discourse.org/t/cannot-send-email-problem-with-port-465/246004/8
DISCOURSE_SMTP_ENABLE_START_TLS: false           # (optional, default true)
DISCOURSE_SMTP_DOMAIN: burlyqna.org              # (required by some providers)
DISCOURSE_NOTIFICATION_EMAIL: noreply@talk.burlyqna.org
إعجاب واحد (1)

متابعة أخيرة: البريد الإلكتروني يعمل!

المشاكل التي واجهتني على طول الطريق:

  • كان DISCOURSE_SMTP_PASSWORD يحتوي على رموز ولكنه لم يكن بين علامتي اقتباس
  • DISCOURSE_SMTP_FORCE_TLS: true لتفعيل SSL
  • DISCOURSE_SMTP_ENABLE_START_TLS: false لإيقاف المصافحة TLS
  • تم تعيين DISCOURSE_NOTIFICATION_EMAIL إلى عنوان بريد إلكتروني غير موجود
DISCOURSE_SMTP_ADDRESS: smtp.mailfence.com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: example@mailfence.com
DISCOURSE_SMTP_PASSWORD: 'passwd'
DISCOURSE_SMTP_FORCE_TLS: true                  
DISCOURSE_SMTP_ENABLE_START_TLS: false
DISCOURSE_NOTIFICATION_EMAIL: admin@example.org
إعجاب واحد (1)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.