# SMTP 릴레이로 메일 전송 시 발생하는 문제

**URL:** https://meta.discourse.org/t/issues-with-mail-sending-to-smtp-relay/259016
**Category:** Self-hosting
**Tags:** email
**Created:** [3월 22, 2023, 10:18오전 UTC](https://meta.discourse.org/t/issues-with-mail-sending-to-smtp-relay/259016 "2023-03-22T10:18:31Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![altmvogi](https://avatars.discourse-cdn.com/v4/letter/a/bbce88/32.png) [@altmvogi](https://meta.discourse.org/u/altmvogi)
#### Post date: [3월 22, 2023, 10:18오전 UTC](https://meta.discourse.org/t/issues-with-mail-sending-to-smtp-relay/259016/1 "2023-03-22T10:18:32Z")

</div>

안녕하세요,  
사용자 이름과 비밀번호가 필요 없는 SMTP 릴레이를 통해 이메일을 보내는 데 문제가 발생하고 있습니다. mailx / sendmail을 사용하여 릴레이로 이메일을 보내는 것은 가능합니다.

해당 설정은 다음과 같습니다.

```plaintext
 DISCOURSE_SMTP_ADDRESS: xyz.example.com (가림 처리됨)
 DISCOURSE_SMTP_PORT: 587
 DISCOURSE_SMTP_AUTHENTICATION: plain

```

discourse\_doctor를 실행할 때 반환되는 오류는 다음과 같습니다.

```plaintext
Net::ReadTimeout

```

데이터를 전송하는 것 같지만 587 포트에서 아무 응답도 받지 못하는 것으로 보아, 전송된 SMTP 메시지가 잘못 작성된 것 같습니다. 이는 Wireshark 트레이스로 증명할 수 있습니다.

문제를 더 자세히 분석할 수 있도록 더 자세한 로깅이나 추가적인 디버깅을 활성화하는 방법에 대해 설명해 주실 수 있을까요? 일반적인 로그에서는 아무런 정보도 얻을 수 없습니다. backtrace를 찾았지만, 저는 Ruby 개발자가 아니기 때문에 이를 해석할 수 없습니다.

```plaintext
/usr/local/lib/ruby/3.2.0/net/protocol.rb:229:in `rbuf_fill'

/usr/local/lib/ruby/3.2.0/net/protocol.rb:199:in `readuntil'

/usr/local/lib/ruby/3.2.0/net/protocol.rb:209:in `readline'

net-smtp-0.3.3/lib/net/smtp.rb:1057:in `recv_response'

net-smtp-0.3.3/lib/net/smtp.rb:659:in `block in do_start'

net-smtp-0.3.3/lib/net/smtp.rb:1067:in `critical'

net-smtp-0.3.3/lib/net/smtp.rb:659:in `do_start'

net-smtp-0.3.3/lib/net/smtp.rb:611:in `start'

/var/www/discourse/vendor/bundle/ruby/3.2.0/bundler/gems/mail-5b700fc95ee6/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'

/var/www/discourse/vendor/bundle/ruby/3.2.0/bundler/gems/mail-5b700fc95ee6/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'

/var/www/discourse/vendor/bundle/ruby/3.2.0/bundler/gems/mail-5b700fc95ee6/lib/mail/message.rb:269:in `deliver!'

/usr/local/lib/ruby/3.2.0/delegate.rb:87:in `method_missing'

/var/www/discourse/lib/email/sender.rb:286:in `send'

/var/www/discourse/app/jobs/regular/user_email.rb:79:in `send_user_email'

/var/www/discourse/app/jobs/regular/user_email.rb:39:in `execute'

/var/www/discourse/plugins/chat/lib/chat/user_email_extension.rb:6:in `execute'

/var/www/discourse/app/jobs/base.rb:249:in `block (2 levels) in perform'

rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in `with_connection'

/var/www/discourse/app/jobs/base.rb:236:in `block in perform'

/var/www/discourse/app/jobs/base.rb:232:in `each'

/var/www/discourse/app/jobs/base.rb:232:in `perform'

sidekiq-6.5.8/lib/sidekiq/processor.rb:202:in `execute_job'

sidekiq-6.5.8/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'

/var/www/discourse/lib/sidekiq/pausable.rb:134:in `call'

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:182:in `invoke'

sidekiq-6.5.8/lib/sidekiq/processor.rb:169:in `block in process'

sidekiq-6.5.8/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq/job_retry.rb:113:in `local'

sidekiq-6.5.8/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'

sidekiq-6.5.8/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq/processor.rb:263:in `stats'

sidekiq-6.5.8/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq/job_logger.rb:13:in `call'

sidekiq-6.5.8/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq/job_retry.rb:80:in `global'

sidekiq-6.5.8/lib/sidekiq/processor.rb:124:in `block in dispatch'

sidekiq-6.5.8/lib/sidekiq/job_logger.rb:39:in `prepare'

sidekiq-6.5.8/lib/sidekiq/processor.rb:123:in `dispatch'

sidekiq-6.5.8/lib/sidekiq/processor.rb:168:in `process'

sidekiq-6.5.8/lib/sidekiq/processor.rb:78:in `process_one'

sidekiq-6.5.8/lib/sidekiq/processor.rb:68:in `run'

sidekiq-6.5.8/lib/sidekiq/component.rb:8:in `watchdog'

sidekiq-6.5.8/lib/sidekiq/component.rb:17:in `block in safe_thread'

```

애플리케이션을 최신 안정 버전으로 다운그레이드해 보았지만, 이 문제는 해결되지 않았습니다. 이전에 이 작업을 담당하던 직원이 휴가 중이라, 최신 업데이트가 수행되기 전까지 어떤 버전이었는지 확인하지 못했습니다. 또한 최근 이메일 관련 영역에서 코드 변경 사항이 있었음을 알게 되었습니다. 혹시 그 부분에 문제가 있는 것일까요?

감사합니다.

---

<div class="post-metadata">

### Author: ![MikeNolan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mikenolan/32/297597_2.png) [@MikeNolan](https://meta.discourse.org/u/MikeNolan)
#### Post date: [3월 22, 2023, 7:10오후 UTC](https://meta.discourse.org/t/issues-with-mail-sending-to-smtp-relay/259016/2 "2023-03-22T19:10:05Z")

</div>

메일 엔진에서 타임아웃이 발생하고 있을 수 있습니다. 이는 최근 다른 주제에서도 언급된 바 있습니다. Postfix는 기본적으로 5초 타임아웃을 설정하고 있습니다.

이메일을 통한 응답 및 게시가 정상적으로 작동하도록 만드는 데 수일간의 고심이 필요했습니다. Discourse 내부와 메일 서버 모두에서 메일러 설정과 방화벽 설정 등 세부 사항들을 올바르게 설정해야 하기 때문입니다.

아직 메일러 문제를 해결하지 못했는데, 특히 여러 ISP에서 화이트리스트에 등재되는 작업이 남아 있습니다. SPF와 DKIM은 정상적으로 작동하고 있습니다.

---

<div class="post-metadata">

### Author: ![altmvogi](https://avatars.discourse-cdn.com/v4/letter/a/bbce88/32.png) [@altmvogi](https://meta.discourse.org/u/altmvogi)
#### Post date: [3월 23, 2023, 6:52오전 UTC](https://meta.discourse.org/t/issues-with-mail-sending-to-smtp-relay/259016/3 "2023-03-23T06:52:43Z")

</div>

답변 감사합니다. 네, 맞습니다. 하지만 제가 찾는 것은 문제의 원인을 알려주는 것입니다. Wireshark 트레이스를 보면 이메일은 전송되었는데 응답이 없는 것이 문제입니다. Linux sendmail을 이용한 일반 이메일은 아무 문제 없이 잘 작동합니다. 해당 도메인에는 SPF와 DKIM도 설정되어 있습니다. Rails 콘솔에서 문제를 재현할 수 있습니다.

message = TestMailer.send\_test(“[ycxi@examle.com](mailto:ycxi@examle.com)”)  
Email::Sender.new(message, :test\_message).send

저는 Ruby 전문가가 아니지만, 스택 트레이스보다 더 자세한 로그를 얻을 수 있는지 확인해 보겠습니다:

[5] pry(main)\> wtf?  
Exception: Net::ReadTimeout: Net::ReadTimeout

---

<div class="post-metadata">

### Author: ![Martin\_Stefan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin_stefan/32/299119_2.png) [@Martin\_Stefan](https://meta.discourse.org/u/Martin_Stefan)
#### Post date: [3월 27, 2023, 11:33오전 UTC](https://meta.discourse.org/t/issues-with-mail-sending-to-smtp-relay/259016/4 "2023-03-27T11:33:05Z")

</div>

app.yml 파일에서 SMTP 타임아웃 임계값을 증가시켜 유사한 문제를 해결했습니다. 이 주제에 대한 참조:

> [@네트워크나 로그인 문제와 무관한 SMTP Net::ReadTimeout - SMTP 호스트가 단순히 느림](https://meta.discourse.org/t/smtp-net-readtimeout-without-relation-to-net-or-login-problems-smtp-host-is-just-slow/235727/2):
>
> For that is necessary to add those new settings on So it looks like 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…

app.yml 파일이 수정된 내용:  
 ![image](https://global.discourse-cdn.com/meta/original/4X/4/2/8/42847230ae6a713f7f28192c3ff8997c8076f8b0.png)

yaml 파일을 변경한 후 앱을 다시 빌드했습니다:  
sudo ./launcher destroy app && sudo ./launcher start app

변경 사항은 GUI에 반영됩니다.

 ![image](https://global.discourse-cdn.com/meta/original/4X/2/5/c/25c316653002e52284b85ac13e942f4322384051.png)
