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

بينما أعتقد أن خطأ @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. أصلحها وأتمكن من استخدام كل شيء بسلاسة (+ أخيرًا جعل المنتدى يعمل بشكل صحيح)

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