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

I can’t get SMTP setup working with Discourse and GMail’s SMTP

I enabled SMTP Relay in Google’s settings, allowed sending from my domain (no IP whitelisting), using SMTP auth + encryption.

Discourse is hosted on 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

I had generic error Job exception: end of file reached, when I added NOTIFICATION_EMAIL and SMTP_DOMAIN envs, now I’m seeing

503 5.5.1 bad sequence of commands x20sm63393lfr.126 - gsmtp

when running doctor and trying to send email to myself.

Changed DISCOURSE_SMTP_DOMAIN to match forum.mydomain.io and still have the same error.

How I’m supposed to debug this further other than changing env, rebuilding and hoping that it works?

Thanks in advance.

Instead of rebuilding you can

./launcher destroy app 
./launcher start app 

There are some topics about getting the Google whatever working. It’s possible, but not easy. And it probably changes every month. :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. أصلحها وأتمكن من استخدام كل شيء بسلاسة (+ أخيرًا جعل المنتدى يعمل بشكل صحيح)

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

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