إعداد SMTP لا يعمل مع GMail smtp-relay

لا أستطيع إعداد SMTP مع Discourse و SMTP الخاص بـ GMail

فعّلت خدمة SMTP Relay في إعدادات Google، وسمحت بالإرسال من نطاقى (بدون تقييد عناوين IP)، باستخدام مصادقة SMTP مع التشفير.

موقع Discourse مستضاف على forum.example.com

DISCOURSE_SMTP_ADDRESS: smtp-relay.gmail.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: noreply@example.com
DISCOURSE_SMTP_PASSWORD: password
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_DOMAIN: mydomain.io
DISCOURSE_NOTIFICATION_EMAIL: noreply@example.com
DISCOURSE_SMTP_ENABLE_START_TLS: true

ظهرت لي رسالة خطأ عامة: Job exception: end of file reached. وعندما أضفت متغيرات البيئة NOTIFICATION_EMAIL و SMTP_DOMAIN، بدأت أرى الآن:

503 5.5.1 bad sequence of commands x20sm63393lfr.126 - gsmtp

عند تشغيل أمر doctor ومحاولة إرسال بريد إلكتروني إلى نفسي.

غيّرت DISCOURSE_SMTP_DOMAIN لتطابق forum.mydomain.io وما زلت أواجه نفس الخطأ.

كيف يمكنني استكشاف هذه المشكلة بشكل أعمق غير تغيير متغيرات البيئة وإعادة البناء على أمل أن تعمل؟

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

بدلاً من إعادة البناء، يمكنك:

./launcher destroy app 
./launcher start app 

هناك بعض المواضيع حول جعل خدمة جوجل (أو ما شابهها) تعمل. هذا ممكن، لكنه ليس سهلاً. ومن المرجح أن يتغير كل شهر. :wink:

3 إعجابات

بينما أعتقد أن خطأ @kvsf قد تم إصلاحه بالفعل أو أن بعض الأشياء الأساسية في تكوينك قد تم تغييرها، أود متابعة هذا الموضوع بنشر تكويني الخاص، ونهجي الإضافي، وطلبي للمساعدة في نفس مجال المشكلة.

التكوين الأساسي

  • Google Workspace Business Starter
  • تكوين توجيه Gmail > SMTP-Relay باستخدام i) المستخدمين المسجلين فقط من داخل النطاق، ii) قائمة IP المسموح بها بعنوان IP الخاص بخادم استضافة المنتدى الخاص بي وفرض مصادقة SMTP، iii) فرض TLS
  • تثبيت Docker الخاص بـ Discourse وفقًا لوثائق Discourse
  • تكوين app.yml وفقًا لـ
expose:
  - "80:80"   # http
  - "443:443" # https

env:
  DISCOURSE_HOSTNAME: "forum.mydomain.com"
  DISCOURSE_DEVELOPER_EMAILS: 'dev@mydomain.com'

  DISCOURSE_SMTP_ADDRESS: "smtp-relay.gmail.com"
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: "user@mydomain.com"
  DISCOURSE_SMTP_PASSWORD: "mypass"
  DISCOURSE_SMTP_ENABLE_START_TLS: true
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_OPEN_TIMEOUT: 25
  DISCOURSE_SMTP_READ_TIMEOUT: 25
  DISCOURSE_SMTP_DOMAIN: "mydomain.com"
  DISCOURSE_NOTIFICATION_EMAIL: "noreply@mydomain.com"
  LETSENCRYPT_ACCOUNT_EMAIL: dev@mydomain.com

اختباراتي

عند تشغيل ./discourse-doctor يؤدي هذا التكوين إلى الخطأ

Testing sending to ...
SMTP server connection successful.
Sending to artificial.testadress@gmail.com. . .
Sending mail failed.
end of file reached

لقد قمت أولاً بالتحقق من خلال سجلات Discourse والبريد المختلفة discourse- and email logs
اختبار نفس العملية يدويًا من داخل Docker (عن طريق الاتصال باستخدام docker exec -it <CONTAINER_ID> bash) عبر

openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:587

لا يواجه أي مشاكل ويعمل بشكل جيد. لذلك أعتقد إما أن تكوين المعلمات الخاص بي في app.yml غريب أو أن Discourse داخليًا لديه بعض سوء التواصل في البرمجة النصية أو … العديد من الاحتمالات. ^^
لتجنب الاضطرار دائمًا إلى ./launcher rebuild app بعد تغيير app.yml لاختبار إعدادات مختلفة، بدأت في تعديل /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb مباشرة عن طريق تغيير الكود الحالي إلى:

class SMTP
  attr_accessor :settings

  DEFAULTS = {
    :address              => 'smtp-relay.gmail.com',
    :port                 => 587,
    :domain               => 'mydomain.com',
    :user_name            => 'user@mydomain.com',
    :password             => 'mypass',
    :authentication       => 'login',
    :enable_starttls      => nil,
    :enable_starttls_auto => true,
    :openssl_verify_mode  => 'peer',
    :ssl                  => nil,
    :tls                  => nil,
    :open_timeout         => 25,
    :read_timeout         => 25
  }

  def initialize(values)
    self.settings = DEFAULTS #.merge(values)
  end

مما يؤدي إلى نفس السلوك المذكور أعلاه (بالنظر إلى إعدادات app.yml المخصصة).

البحث عن المساعدة

والآن أنا عالق. بالطبع يمكنني اللعب أكثر بالإعدادات المتبقية (وحتى العودة إلى استخدام SSL فقط، على الرغم من أن هذا مهمل من قبل Discourse)، ولكن أود أن:

  1. أتعلم كيفية تحليل هذه المشكلة بشكل أعمق وأبعد
  2. أفهم بذلك ما يحدث حقًا وما هي المشكلة
  3. أصلحها وأتمكن من استخدام كل شيء بسلاسة (+ أخيرًا جعل المنتدى يعمل بشكل صحيح)

شكراً جزيلاً لمساعدتكم مقدماً.

دفع*
أي أفكار/اقتراحات؟

هل تم حل هذا؟ أنا أتطلع إلى القيام بهذا الشيء بالضبط ووجدت هذا المنشور الذي يجعلني متوتراً.

لست متأكدًا بخصوص Gmail، ولكن Zoho لا يعمل وتوقف Outlook عن العمل في موقع للتجارة الإلكترونية كنت جزءًا من إدارته.

لقد كان استخدام خدمة بريد إلكتروني للمعاملات مثل Mailersend هو أفضل ممارسة لفترة طويلة، ولكنه أصبح مطلبًا متزايدًا مع مرور الوقت.

تعديل للتوضيح: إنها عملية حظر من جانب مزود البريد الإلكتروني وليست شيئًا يمكن إصلاحه على جانب Discourse أو الخادم. لم يعد معظم المزودين يدعمون، إن كانوا قد دعموا رسميًا على الإطلاق، استخدام SMTP لإرسال رسائل البريد الإلكتروني للمعاملات.

إعجابَين (2)