Gmailのsmtp-relayでSMTP設定が機能しない

Discourse と GMail の SMTP を設定しても動作しません。

Google の設定で SMTP リレーを有効にし、ドメインからの送信を許可しました(IP _whitelist_は設定していません)。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

NOTIFICATION_EMAILSMTP_DOMAIN の環境変数を追加したところ、一般的なエラー Job exception: end of file reached が発生しました。その後、doctor を実行して自分自身にメールを送信しようとすると、以下のエラーが表示されます。

503 5.5.1 bad sequence of commands x20sm63393lfr.126 - gsmtp

DISCOURSE_SMTP_DOMAINforum.mydomain.io に変更しても、同じエラーが発生します。

環境変数を変更し、再ビルドしてうまくいくことを願う以外に、この問題をさらにデバッグする方法はありますか?

よろしくお願いいたします。

再構築する代わりに、以下のコマンドを実行できます。

./launcher destroy app 
./launcher start app 

Google の何かを動作させる方法について、いくつかのトピックがあります。可能ではありますが、簡単ではありません。しかも、おそらく毎月変更されます。:wink:

「いいね!」 3

@kvsfさんのエラーはすでに修正されたか、設定の根本的な部分が変更されたと信じていますが、同じ問題領域で、私の設定、今後のアプローチ、そして助けを求めるためにこのスレッドを続けたいと思います。

基本設定

  • Google Workspace Business Starter
  • Gmailルーティングの設定 > SMTPリレー(i)ドメイン内の登録済みユーザーのみ、(ii)フォーラムホスティングサーバーIPによるIPホワイトリスト登録とSMTP認証の強制、(iii)TLSの強制
  • discourseドキュメントに従ったDiscourse Dockerインストール
  • 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とメールのログを確認しました。
Docker内から docker exec -it <CONTAINER_ID> bash で接続し、
openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:587
で同じプロセスを手動でテストすると、問題なく動作します。したがって、app.yml のパラメータ設定がおかしいか、Discourse内部でスクリプトの誤通信が発生しているか、または…多くの可能性があります。^^
app.yml を変更してテストするたびに ./launcher rebuild app を実行するのを避けるために、/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は動作せず、私が管理に関わっていたeコマースサイトではOutlookが動作しなくなりました。

トランザクションメールサービス(例:MailerSend)を使用することが長年のベストプラクティスであり、時間の経過とともにますます必須となっています。

追記:これはメールプロバイダー側でのブロックであり、Discourseやサーバー側で修正できるものではありません。ほとんどのプロバイダーは、トランザクションメールの送信にSMTPを使用することを公式にサポートしていないか、サポートを終了しています。

「いいね!」 2