# 네트워크나 로그인 문제와 무관한 SMTP Net::ReadTimeout - SMTP 호스트가 단순히 느림

**URL:** https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727
**Category:** Feature
**Tags:** completed
**Created:** [8월 10, 2022, 12:42오후 UTC](https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727 "2022-08-10T12:42:27Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![rfk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rfk/32/270287_2.png) [@rfk](https://meta.discourse.org/u/rfk)
#### Post date: [8월 10, 2022, 12:42오후 UTC](https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727/1 "2022-08-10T12:42:27Z")

</div>

안녕하세요,

몇 주 전부터 Discourse 인스턴스에서 이메일을 보내는 작업이 실패하고 있습니다. SMTP 설정은 변경되지 않았고, curl 테스트는 여전히 작동하지만 눈에 띄게 느립니다. 메일 전송에 사용해야 하는 호스터의 SMTP 서버는 일관되게 7초의 전송 시간을 기록하고 있습니다.

```plaintext
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`의 테스트 인터페이스에서 확인할 수 있습니다:

 ![screenshots](https://global.discourse-cdn.com/meta/original/4X/c/e/4/ce481b61e018ca89758b2bf03cc8b793970dfaf2.png)

- Docker 앱 컨테이너의 타이밍은 로컬 테스트 또는 Docker 호스트에서의 테스트와 동일합니다.
- cURL로 전송된 메일은 (7초 대기 + 순식간의 처리 시간 후에) 올바르게 전달됩니다.
- 사생활 보호상의 이유로, sendgrid, mailgun 등 일반적인 우회책은 아쉽게도 선택지가 아닙니다.
- `ActionMailer` 7.0.x로의 전환이 이 문제를 일으킨 것일까요?
  - [rails/actionmailer/CHANGELOG.md at v7.0.3.1 · rails/rails · GitHub](https://github.com/rails/rails/blob/v7.0.3.1/actionmailer/CHANGELOG.md)
  - 

> SMTP 설정에 대해 `open_timeout`과 `read_timeout`의 기본값을 모두 5로 구성합니다.

`read_timeout`을 구성하는 방법에 대한 아이디어를 주시면 감사하겠습니다.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [8월 10, 2022, 2:23오후 UTC](https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727/2 "2022-08-10T14:23:32Z")

</div>

> [@rfk](#):
>
> `read_timeout`를 설정하는 방법에 대한 아이디어가 있다면 알려주시면 감사하겠습니다.

이를 위해 다음 파일에 새로운 설정을 추가해야 합니다.

> <https://github.com/discourse/discourse/blob/fff3ff11c0109e14586c924dc96cd35a8b907d64/config/environments/production.rb#L27-L36>

즉, 다음과 같이 보이도록 해야 합니다.

```diff
  if GlobalSetting.smtp_address
    settings = {
      address: GlobalSetting.smtp_address,
      port: GlobalSetting.smtp_port,
      domain: GlobalSetting.smtp_domain,
      user_name: GlobalSetting.smtp_user_name,
      password: GlobalSetting.smtp_password,
      authentication: GlobalSetting.smtp_authentication,
      enable_starttls_auto: GlobalSetting.smtp_enable_start_tls,
+ open_timeout: GlobalSetting.smtp_open_timeout,
+ read_timeout: GlobalSetting.smtp_read_timeout
    }

```

변경 사항을 포함하여 풀 리퀘스트를 만들어 주실 수 있을까요?

---

<div class="post-metadata">

### Author: ![rfk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rfk/32/270287_2.png) [@rfk](https://meta.discourse.org/u/rfk)
#### Post date: [8월 10, 2022, 2:43오후 UTC](https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727/3 "2022-08-10T14:43:13Z")

</div>

Falco님,

빠른 답변 주셔서 감사합니다. 말씀하신 대로, 해당 변경 사항이 적용되었습니다:

 ![screenshot](https://global.discourse-cdn.com/meta/original/4X/4/c/4/4c40b34c5be71801cf6b6fc61bd3cdd42be3d53c.png)

- `app.yml`의 새로운 타임아웃이 표시되고 있습니다.
- 이메일을 전송할 수 있습니다.

제 Ruby 실력이 거의 전무해서, 풀 리퀘스트를 준비하는 데 최선을 다해 보겠습니다. 도움 주시고, Discourse 커뮤니티에 항상 감사드립니다.

감사합니다.

Roland 드림

---

<div class="post-metadata">

### Author: ![rfk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rfk/32/270287_2.png) [@rfk](https://meta.discourse.org/u/rfk)
#### Post date: [8월 10, 2022, 3:00오후 UTC](https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727/4 "2022-08-10T15:00:28Z")

</div>

PR가 공개되었습니다: [Allow configuration of smtp timeout settings - Pull Request #17863 - discourse/discourse - GitHub](https://github.com/discourse/discourse/pull/17863)

PR을 어떻게/어떻게 개선할 수 있는지 의견을 주시면 감사하겠습니다.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [8월 11, 2022, 3:22오후 UTC](https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727/5 "2022-08-11T15:22:40Z")

</div>

PR에 CLA 서명만 있으면 병합할 수 있습니다.

---

<div class="post-metadata">

### Author: ![rfk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rfk/32/270287_2.png) [@rfk](https://meta.discourse.org/u/rfk)
#### Post date: [8월 15, 2022, 5:48오전 UTC](https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727/6 "2022-08-15T05:48:14Z")

</div>

죄송합니다, 연휴가 길었습니다. 완료했습니다.

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [8월 15, 2022, 12:19오후 UTC](https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727/7 "2022-08-15T12:19:53Z")

</div>

> [@rfk](#):
>
> 우리가 메일을 보내기 위해 사용하는 호스터의 SMTP 서버는 일관된 전송 시간이 7초입니다.

참고로, 그들은 스팸메일러를 억제하기 위해 의도적으로 이렇게 하고 있습니다. 대부분의 자동화된 스팸 도구도 5초 타임아웃을 가지고 있기 때문입니다.

---

<div class="post-metadata">

### Author: ![rfk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rfk/32/270287_2.png) [@rfk](https://meta.discourse.org/u/rfk)
#### Post date: [8월 15, 2022, 12:35오후 UTC](https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727/8 "2022-08-15T12:35:56Z")

</div>

SMTP 서버 측의 지연이 너무 균일하기 때문에 정확히 이런 결과를 예상하고 있었습니다. 따라서 @Falco가 제안한 수정 사항, 즉 현재 [PR#17863](https://github.com/discourse/discourse/pull/17863)에 포함된 변경 사항은 더 많은 사용자에게 관련이 있을 수 있습니다.

`core frontend (Headless Firefox)` 단위 테스트에서 [오류](https://github.com/discourse/discourse/runs/7770932328?check_suite_focus=true)가 발생했습니다. 정확히 어떤 일이 일어나고 있는지 잘 모르지만, 이 오류가 우리의 변경 사항으로 인해 발생했을 것으로는 생각하지 않습니다.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [8월 15, 2022, 3:14오후 UTC](https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727/9 "2022-08-15T15:14:52Z")

</div>

PR과 테스트 감사합니다. 이제 병합되었습니다.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [8월 20, 2022, 11:00오전 UTC](https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727/10 "2022-08-20T11:00:13Z")

</div>

이 주제는 4일 후 자동으로 닫혔습니다. 더 이상 답변을 작성할 수 없습니다.
