こんにちは。
数週間前から、Discourseインスタンスからのメール送信に失敗しています。SMTP設定は変更されておらず、curlテストは依然として機能していますが、著しく遅くなっています。ホスティングプロバイダーのSMTPサーバー(メール送信に必要)では、一貫して7秒の送信時間がかかります。
cat testmail | curl -vvv --url 'smtp://smtp.<HOST>:587' --mail-from mail@<DOMAIN> --mail-rcpt <ME> --user "mail@<DOMAIN>:<PW>" -T -
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying <IP>...
* Connected to smtp.<HOST> (<IP>) port 587 (#0)
< 220 mailproxy1.<HOST> Dovecot ready.
> EHLO ecm2
< 250-mailproxy1.<HOST>
< 250-8BITMIME
< 250-AUTH PLAIN LOGIN
< 250-BURL imap
< 250-ENHANCEDSTATUSCODES
< 250-SIZE
< 250-STARTTLS
< 250 PIPELINING
> AUTH PLAIN
< 334
> xxxxxx=
0 0 0 0 0 0 0 0 --:--:-- 0:00:06 --:--:-- 0< 235 2.7.0 Authentication successful
0 0 0 0 0 0 0 0 --:--:-- 0:00:07 --:--:-- 0> MAIL FROM:<mail@<DOMAIN>>
< 250 2.1.0 Ok
> RCPT TO:< <ME> >
< 250 2.1.5 Ok
> DATA
< 354 End data with <CR><LF>.<CR><LF>
} [89 bytes data]
100 89 0 0 0 89 0 11 --:--:-- 0:00:07 --:--:-- 20< 250 2.0.0 Ok: queued as 356C3288C85
100 89 0 0 0 89 0 11 --:--:-- 0:00:07 --:--:-- 26
* Connection #0 to host smtp.<HOST> left intact
これを社内メールサーバーと比較すると、メールあたり1秒未満です。メールホスティングプロバイダーからの7秒は実際には問題ありませんが、(ハードコーディングされていると思われる?)5秒のタイムアウトを引き上げる設定を見つけることができませんでした。open_timeoutと、私にはより関連性が高いと思われるread_timeoutは、/admin/emailのテストインターフェイスでも確認できます。
- Dockerアプリコンテナ内のタイミングは、ローカルテストまたはDockerホストでのテストと同じです。
- cURLで送信されたメールは(7秒の待機時間+瞬き後に)正しく配信されます。
- プライバシー上の理由から、SendGrid、Mailgunなどの通常の回避策は残念ながら選択肢がありません。
- もしかしたら、
ActionMailer7.0.xへの切り替えがこの問題を引き起こしたのかもしれませんか?- rails/actionmailer/CHANGELOG.md at v7.0.3.1 · rails/rails · GitHub
-
SMTP設定の
open_timeoutとread_timeoutの両方にデフォルトで5を設定します。
read_timeoutを設定する方法について、何かアイデアがあれば教えてください。

