kvsf
1
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.
pfaffman
(Jay Pfaffman)
2
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. 
「いいね!」 3
openUC2
(openUC2)
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によって非推奨になっています)。しかし、私は次のことをしたいです。
- この問題をより深く分析する方法を学ぶ
- それによって、何が実際に起こっていて、何が問題なのかを理解する
- 修正して、すべてをスムーズに使用できるようにする(そして、フォーラムを正常に動作させる)
ご協力ありがとうございます。