안녕하세요,
몇 주 전부터 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을 구성하는 방법에 대한 아이디어를 주시면 감사하겠습니다.

