خطأ SMTP: يجب إصدار أمر STARTTLS أولاً

أنا أحاول إعداد Discourse 2.7.0.beta4 مع خدمة SMTP الخاصة بـ MailerSend.

بعد تشغيل ./discourse-doctor، حصلت على الخطأ التالي:

SMTP error: Must issue a STARTTLS command first

إليك إعدادات ملف app.yml الحالي الخاص بي فيما يتعلق بـ SMTP:

  DISCOURSE_SMTP_ADDRESS: 'smtp.mailersend.net'
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: username@subdomain.domain.org
  DISCOURSE_SMTP_PASSWORD: mypasswordhere
 #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (اختياري، الافتراضي true)
 #DISCOURSE_SMTP_AUTHENTICATION: login
 #DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

لقد جربت بالفعل إلغاء التعليق وتعيين DISCOURSE_SMTP_ENABLE_START_TLS بشكل صريح إلى true، لكن الخطأ لا يزال قائمًا. الأمر نفسه ينطبق على DISCOURSE_SMTP_AUTHENTICATION: login.

بعد أي تغيير في ملف YML، أقوم بإعادة تشغيل النظام باستخدام الأمر التالي:

./launcher destroy app; ./launcher start app

هل لديك أي نصيحة حول ما يحدث؟

شكرًا مقدّمًا!

لقد أجريت بعض التغييرات على discourse-setup مؤخرًا، وكذلك تغييرًا في مهمة rake التي تستخدمها (أعتقد أنها لم تُدمج بعد).

إذا كنت ترغب في منحني الوصول إلى خادمك، فسأقوم بالنظر في الأمر.

إعجابَين (2)

كما ذكرت عبر الرسائل الخاصة، لا يمكنني منح الوصول إلى الخادم بسبب مخاوف أمنية. ولكن شكرًا جزيلاً لك يا @pfaffman على مساعدتك وعلى محاولة حل هذه المشكلة.

دعني أضيف المزيد من السياق لهذه المشكلة: قام مسؤول سابق بتثبيت Discourse مع خدمة SMTP الخاصة بـ Mailgun، لكنها توقفت عن العمل ولا أملك وصولاً إلى تلك الحساب.

وكما قلت، أحاول الآن إعداده باستخدام Mailersend. لقد قرأت هذا الموضوع [1] وموضوعات أخرى حول STARTTLS هنا في المنتدى، لكنني لست متأكدًا من كيفية تطبيق التغييرات المطلوبة.

جربت أيضًا الإعداد أدناه، لكن الخطأ لا يزال قائمًا:

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

إذا كان الأمر مرتبطًا ببعض التحديثات الأخيرة، فربما يكون من الأفضل التفكير في التراجع إلى إصدار سابق؟

[1] Can't send email with certificate issue - #3 by supermathie

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

هل نجح الأمر معك؟

لا، لقد قرّرت التحول إلى خدمة بريد إلكتروني أخرى. الآن يعمل الأمر بشكل ممتاز مع Mailjet.

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

أواجه مشكلة مماثلة. بالأمس قمت بتصحيح إرسال البريد الإلكتروني على مثيل Discourse جديد لمدة ثلاث ساعات تقريبًا، دون أي نجاح. أحاول إرسال البريد الإلكتروني عبر Fastmail باستخدام STARTTLS على المنفذ 587. الخدمات الأخرى تعمل بنفس بيانات الاعتماد.

لا أحصل على استجابة الخطأ “يجب إصدار أمر STARTTLS أولاً” بهذه الإعدادات:

DISCOURSE_SMTP_ADDRESS: 'smtp.fastmail.com'
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: 'myuser@fastmail.fm'
DISCOURSE_SMTP_PASSWORD: 'mypass'
DISCOURSE_SMTP_ENABLE_START_TLS: true

… متبوعًا بـ ./launcher rebuild app، عندما أقوم بتشغيل ./discourse-doctor وأرسل بريدًا إلكترونيًا، أحصل على خطأ 500 5.5.1 Invalid command كرد.

اليوم بدأت في تتبع الاتصال باستخدام tcpdump، ولاحظت أن Discourse لا يبدو أنه يستخدم STARTTLS بالفعل. إليك ما يحدث عند إرسال بريد إلكتروني لاستعادة كلمة المرور من Grafana:

< 220 smtp.fastmail.com ESMTP ready
> EHLO 9b5ba1569f77
< 250-smtp.fastmail.com
< 250-PIPELINING
< 250-SIZE 71000000
< 250-ENHANCEDSTATUSCODES
< 250-8BITMIME
< 250 STARTTLS
> STARTTLS
< ...[encrypted]

ولكن مع Discourse، يحدث هذا:

< 220 smtp.fastmail.com ESMTP ready
> EHLO localhost
< 250-smtp.fastmail.com
< 250-PIPELINING
< 250-SIZE 71000000
< 250-ENHANCEDSTATUSCODES
< 250-8BITMIME
< 250 STARTTLS
> AUTH PLAIN [redacted]
< 500 5.5.1 Invalid command

لذا، يبدو أن Discourse يرسل بيانات الاعتماد الخاصة بي عبر الإنترنت كنص عادي، على الرغم من تمكين STARTTLS في الإعدادات؟ هل هذا خطأ؟

لاحظت أيضًا أنه عند تشغيل ./discourse-doctor، يلخص ملخص “YML SETTINGS” في الأعلى العناصر التالية:

==================== YML SETTINGS ====================
DISCOURSE_HOSTNAME=forum.[redacted]
SMTP_ADDRESS=smtp.fastmail.com
DEVELOPER_EMAILS=sysadmin@[redacted]
SMTP_PASSWORD=[redacted]
SMTP_PORT=587
SMTP_USER_NAME=[redacted]@fastmail.fm
LETSENCRYPT_ACCOUNT_EMAIL=

ومع ذلك، لا يوجد ذكر لـ DISCOURSE_SMTP_ENABLE_START_TLS، على الرغم من أنه تم تعيينه في app.yml. لست متأكدًا مما إذا كانت هذه المشكلة مرتبطة.

إعجابَين (2)

هذا غريب. لقد أنشأت حساب مستخدم يدويًا (عبر rake admin:create) ثم سجلت الدخول، وفجأة بدأت إشعارات البريد الإلكتروني في العمل. ومع ذلك، لا يزال الإرسال عبر discourse-doctor يفشل.

هل ربما discourse-doctor معطل؟

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

آسف. أعرف مدى الإحباط الذي يمكن أن يكون عليه الأمر.

من الممكن. يقوم ببعض الأشياء لمحاولة تصحيح ما هي المشكلة، لذلك قد يكون المنطق الذي يستخدمه معطلاً في حالتك..

هناك أيضًا مهمة rake ربما كانت خيارًا أفضل لك.

    rake emails:test[x@y.com]

هل كنت تتبع استكشاف أخطاء البريد الإلكتروني وإصلاحها في تثبيت Discourse جديد؟

إعجابَين (2)

لم أكن على علم بهذا الأمر، يبدو أنه مفيد بالفعل! لكن النتيجة هي نفسها:

root@app:/var/www/discourse# rake emails:test redacted@example.com
Testing sending to  using smtp.fastmail.com:587, username:myuser@fastmail.fm with plain auth.
======================================== ERROR ========================================
                                    UNEXPECTED ERROR
500 5.5.1 Invalid command


====================================== SOLUTION =======================================
This is not a common error. No recommended solution exists!

Please report the exact error message above to https://meta.discourse.org/
(And a solution, if you find one!)
=======================================================================================

عندما أنظر إلى tcpdump، أرى مرة أخرى أنه يرسل بيانات اعتماد AUTH PLAIN كنص عادي دون تشفير STARTTLS.

لقد نظرت في تلك الصفحة، نعم.

ومع ذلك، بناءً على tcpdump، يبدو هذا خطأ في أدوات التشخيص بالنسبة لي لأن STARTTLS لا يتم استخدامه على الرغم من تمكين الإعداد في app.yml. (تطبيق Discourse نفسه يستخدم STARTTLS. أفترض أن العديد من مزودي البريد الإلكتروني سيسمحون بإرسال البريد الإلكتروني غير المشفر أيضًا، لذلك ستنشأ هذه المشكلة فقط إذا استخدم شخص ما أدوات التشخيص واستخدم مزودًا لا يقبل الإرسال غير المشفر عبر SMTP.)

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

آه. يبدو أن مهمة rake هذه هي نفسها التي تستدعيها discourse-doctor. آسف لذلك.

ربما يمكن لشخص ما إلقاء نظرة على كيفية جعل مهمة rake هذه تشبه العملية الفعلية، أو على الأقل عدم الاستسلام إذا كانت محاولاتها لفهم ما يجري غير دقيقة. ستكون الخطوة الأولى الجيدة هي القول “حسنًا، يبدو أن XXX معطل، لكننا سنحاول على أي حال…”

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