리버스 프록시 환경에서 discourse의 메일 문제

app.yml에서 이메일 설정을 다음과 같이 구성했습니다.

  DISCOURSE_SMTP_ADDRESS: mail.mysecrect.tld
  DISCOURSE_SMTP_PORT: 465
  DISCOURSE_SMTP_USER_NAME: minegenix@mysecret.tld
  DISCOURSE_SMTP_PASSWORD: <secret>

로그에서 이것도 발견했습니다:

fail
Delivered mail 3ff63fed-4142-4042-ab33-29493b32b3a6@beta2.mysecret.tld (30001.9ms)
Job exception: execution expired

app.yml에 다음 항목을 추가해야 할 수 있습니다

DISCOURSE_SMTP_ENABLE_START_TLS: false

아, 참고로 저는 mailcow를 사용해요!

서버가 mysecret.tld가 아니라 discourse beta2.mysecret.tld로 실행되고 있는 건가요?

다음 옵션들을 시도해 보세요:

DISCOURSE_SMTP_ADDRESS: 172.17.0.1 # 여기에는 내부 IP를 사용하세요 - 메일 서버 도메인이 올바르게 해석되지 않을 수 있습니다
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: "YOUR-SMTP-USER-NAME"
DISCOURSE_SMTP_PASSWORD: "YOUR-SMTP-PASSWORD"
#DISCOURSE_SMTP_ENABLE_START_TLS: true           # (선택 사항, 기본값 true)
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none
DISCOURSE_SMTP_DOMAIN: mysecret.tld

mysecret.tld는 포럼 주소를 공개하고 싶지 않아서 실제 도메인을 숨기기 위해 사용한 임시 자리표시자일 뿐입니다 :slight_smile:

…@ beta2. mysecret.tld와 같은 발신자 이메일로 메일을 보내고 계신 건가요? 하지만 mailcow 계정은 …@mysecret.tld로 되어 있는 경우입니다?

아니요, 저는 …@mysecret.tld에서 이메일을 보내고 있고, 사이트는 beta2.mysecret.tld에서 실행 중입니다.

@Sprisa 내가 올린 설정을 추가하고 다시 빌드해줘.

그렇게 하면 도움이 될지 확인해봐.

@rrit 너는 무슨 말을 하는지 모르겠네 :man_facepalming:

네, 지금 그렇게 하고 있어요

참고로, 재빌드할 때마다 부트스트랩을 실행해야 하나요?

음, 설정을 추가했는데도 해결되지 않았어요.

SMTP 서버와의 최초 연결 문제 디버깅 방법

1. 컨테이너 진입:

./launcher enter app

2. getent hosts를 사용하여 SMTP 서버 이름의 DNS 이름 해석 확인:

(dig, nslookup, ping 등은 컨테이너 내부에 설치되어 있지 않습니다.)

getent hosts your.smtp.server

성공 시 결과:

# IPv4
123.123.123.123 your.smtp.server

# IPv6
2001:db8:0:0:0:ff00:42:8329 your.smtp.server

3. openssl을 사용하여 SMTP 서버로 연결을 시도해 보세요:

(telnet, nc 등은 컨테이너 내부에 설치되어 있지 않습니다.)

성공적으로 연결될 때까지 여러 설정을 조정해 보세요.

openssl s_client -connect your.smtp.server:465
openssl s_client -connect your.smtp.server:587 -starttls smtp

# IPv4
openssl s_client -connect 172.17.0.123:465
openssl s_client -connect 172.17.0.123:587 -starttls smtp

# IPv6
openssl s_client -6 -connect "[2001:db8:0:0:0:ff00:42:8329]:465"
openssl s_client -6 -connect "[2001:db8:0:0:0:ff00:42:8329]:587" -starttls smtp

참고: How to check SMTP connection → Step 3: Checking SMTP Connection Over TLS Using Openssl

4. Discourse에서 발견한 작동하는 연결 설정을 사용하세요.

:rocket:

보너스: Docker 컨테이너 내부에서 Discourse IP 표시

( ifconfig , ip 등은 컨테이너 내부에 설치되어 있지 않습니다.)

hostname -I

결과 예시:

172.17.0.2

openssl로 연결이 되지 않고, getent 명령어로도 다음 내용만 표시됩니다:

2606:4700:3032::ac43:d2f1 mail.secret.tdl
2606:4700:3033::6815:4db8 mail.secret.tld

(여기서 secret.tld는 제 실제 도메인을 대신 표기한 것입니다)

추측이지만, 이건 공개 IP인가요? mailcow가 이 공개 IP에서 smtp 연결을 수신하도록 설정되어 있나요, 아니면 내부 네트워크에서만 수신하도록 되어 있나요?

Discourse 컨테이너 내부에서 컨테이너의 IP를 확인하려면 다음을 사용할 수 있습니다:

hostname -I

mailcow도 같은 내부 (docker-) 네트워크에 있나요?

172.17.0.2는 hostname -I 명령으로 얻은 값입니다

mailcow 컨테이너에 접속한 후 hostname -I 명령도 실행해 볼 수 있나요? Mailcow와 Discourse가 같은 호스트에 있는 두 개의 별도 Docker 컨테이너인가요?

메일코우 컨테이너에 들어가는 방법은 무엇인가요? 런처 스크립트가 없네요.

저도 mailcow에 대해서는 잘 모르겠습니다. mailcow 커뮤니티에 다시 문의해 보는 것이 더 나을 수도 있습니다: https://community.mailcow.email/

포럼에서 메일 서비스로 사용할 수 있는 우분투에 설치할 수 있는 소프트웨어나 메일 시스템을 위해 무엇을 사용해야 할까요?