SMTP 설정과 함께 TLS 인증서 추가

저는 제 전용 송신 전용 서버를 사용하여 이메일을 보내려고 합니다. TLS를 사용하기 위해 SMTP 게이트웨이를 실행 중이며, 이로 인해 이메일을 보내는 데 사용하는 클라이언트에 인증서가 필요합니다. 이메일 전송에 postfix/ssmtp를 사용한다면 자체 서명 인증서를 매우 쉽게 구성할 수 있지만, discourse 이메일 클라이언트에서 사용자 지정 인증서를 어떻게 사용할 수 있는지 확실하지 않습니다.

간략한 개요를 이해하시려면:

쉬운 시나리오:
Discourse —send—mail—> mailgun —send–mail—> 사용자

제 시나리오:
Discourse —send–mail–> SMTP 게이트웨이를 실행 중인 제 서버 —relay-mail-using-aws-ses-API—> 사용자

감사합니다.

질문을 수정하고 싶습니다. 즉, 이 작업에 인증서를 추가할 필요가 없는데도 TLS 통신이 여전히 실패합니다. swaks로 테스트하면 정상적으로 작동합니다. 예시 명령어:

swaks --to user@example.com --from me@example.com --auth PLAIN --auth-user myusername -tls -s smtp.somehost.com:2525

AWS SES SMTP를 직접 사용하면 됩니다. 왜 로컬 릴레이를 사용하시려는 건가요?

@itsbhanusharma AWS SES는 월 60,000건의 이메일을 무료로 제공하며, 제 지론에 따르면 이러한 이메일 호출은 EC2 인스턴스에서 요청해야 정상적으로 작동하고, 그렇지 않으면 일반 요금으로 청구됩니다. 제 Discourse 인스턴스는 DigitalOcean 드롭렛에 호스팅되어 있습니다. 제 이해가 틀렸을 수도 있지만, 이것이 제 해석과 그 근거입니다.

따라서 SES API가 DigitalOcean IP에서 온 이메일을 수신하더라도 과금 대상이 됩니다. DO 드롭렛과 AWS SES 사이의 브릿지로 exim을 EC2 인스턴스에 설정해 사용하거나 다른 서비스를 사용하는 것도 고려해볼 수 있습니다. 작동하지 않을 것 같지만 시도해볼 수는 있습니다.

(이론적으로는) 다음과 같이 구성해야 합니다:

  1. Discourse(DO에서)가 EC2의 exim IP로 이메일을 전송합니다.
  2. EC2가 DO에서 받은 이메일을 SES로 중계합니다.
  3. SES가 이메일을 최종 사용자에게 전달합니다.

EC2에서 로컬 SMTP 서버를 실행하여 SMTP 요청을 SES로 전달하는 방식으로 중계 문제를 이미 해결했습니다. 문제는 Discourse가 이 SMTP 서버와 TLS 핸드셰이크에서 실패하는 반면, Postfix/SWAKS와 같은 다른 애플리케이션은 정상적으로 작동한다는 점입니다.

이를 해결하려면 25번 포트(암호화 없음)를 사용하는 것만으로 충분합니다.

이 SMTP 핸드셰이크가 어디서 처리되는지 확인할 수 있는 방법이 있을까요? 예를 들어, Ruby에서 디스커스가 백그라운드에서 사용하는 라이브러리 같은 것 말이죠. 여기서 TLS를 비활성화하고 싶지는 않습니다.

그렇다면 유효한 SSL 인증서를 사용하세요 (letsencrypt도 문제없이 작동할 것입니다)

어떤 이유인지 모르겠지만 Let’s Encrypt의 유효한 인증서를 사용해도 문제가 해결되지 않았습니다.
하지만 app.yaml에 아래 설정을 추가한 후로 이메일이 정상적으로 작동하고 있습니다.

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

SMTP에 대해 더 잘 아는 누군가가 이 설정이 왜 작동하는지 설명해 줄 수 있을 것 같지만, 지금은 일단 괜찮습니다.

이 방식이 결국 단순히 Discourse 인스턴스를 S3로 이동하는 것보다 더 저렴할까요?

현재 AWS에서 $5짜리 EC2 인스턴스를 여러 도메인의 릴레이 용도로 사용 중입니다. DigitalOcean에서 Discourse를 EC2로 옮기면 비용이 조금 더 들지만, 솔직히 몇 달러 정도밖에 차이가 나지 않습니다.

하지만 핵심은, Discourse를 EC2로 옮기더라도 다른 도메인을 위해 DigitalOcean에 있는 나머지 드롭렛들을 지원하기 위해 여전히 해당 릴레이 서비스가 필요하다는 점입니다. 그렇다면 그냥 Discourse를 고치는 게 좋지 않나요? :slight_smile:

글쎄, 본인도 인정했듯이 Discourse는 고장 나 있지 않고 SES와도 완벽하게 연동됩니다.

무료로 이메일을 중계하기 위해 SES의 제한을 우회하려는 시도입니다.

맞습니다. 하지만 여기서 Discourse는 SES와 아무 관련이 없습니다. Discourse는 SMTP 서버와 통신하는데, 이 서버는 어떤 것이든 될 수 있습니다(현재는 릴레이 서비스입니다). 같은 DO VPC 내에서 postfix/swaks 등은 해당 SMTP 서버와 정상적으로 작동하는데, 왜 Discourse만 그렇지 않은지 궁금했습니다. 해당 변수를 설정한 후에는 잘 작동합니다. 그래도 Discourse에서 SMTP 핸드셰이크에 어떤 라이브러리를 사용하는지 알고 싶습니다. 그래야 Discourse에서 개선할 수 있는 부분이 있는지 직접 확인해 볼 수 있을 것 같습니다.