이메일 서버에서 메일을 수신할 수 없습니다

안녕하세요,

이 문제는 잘 알려진 이슈이며, 비교적 쉽게 발생할 수 있는 문제입니다. 많은 테스트를 해보았지만, “이메일 전송” 단계에서 막혀 있습니다.

아래 링크의 가이드를 따랐습니다: discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub
제 설정 과정은 다음과 같습니다.

git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse

/samples/ 디렉터리로 이동하여 standalone.yml을 /containers/app.yml로 복사합니다.

서버에 대한 정보를 수정합니다.
그 다음,

sudo ./discourse-doctor

첫 번째 실험

app.yml을 다음과 같이 설정했을 때:

DISCOURSE_HOSTNAME : 'localhost'

그리고 다음 정보를 입력했습니다:

  DISCOURSE_SMTP_ADDRESS: XXX
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: XXX
  DISCOURSE_SMTP_PASSWORD: XXX
  DISCOURSE_SMTP_ENABLE_START_TLS: true   

이메일 서버도 내부 네트워크에 구축되어 있습니다.
처음에는 정상적으로 작동했습니다. Discourse가 가입 이메일을 올바르게 보냈고, 관리자 페이지도 정상적으로 접근할 수 있었습니다.

그러나 HOSTNAME을 localhost로 설정하면 브라우저에서 내부 IP(예: 10.1.X.X)를 사용하여 접근할 수 없었습니다.


두 번째 실험

따라서 app.yml에서 DISCOURSE_HOSTNAME만 수정하고 다른 정보는 변경하지 않았습니다.

DISCOURSE_HOSTNAME : '10.1.3.91'

참고: 10.1.3.91은 제 내부(로컬 영역) IP입니다.

이렇게 호스트명을 변경한 후에는 브라우저에서 접근할 수 있었습니다. 그러나 이메일 서버가 더 이상 작동하지 않았습니다. Discourse에서 온 이메일을 받을 수 없었습니다.


보충 설명

SMTP를 사용하여 Python으로 이메일을 보내는 것을 시도해 보았습니다.

스크립트는 다음과 같습니다:

from email.mime.multipart import MIMEMultipart
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib

content = MIMEMultipart() 
content["subject"] = "Learn Code With Mike"  
content["from"] = " (제 이메일) "  
content["to"] = " (테스트용 이메일) "
content.attach(MIMEText("Demo python send email"))  


with smtplib.SMTP(host=" (DISCOURSE_SMTP_ADDRESS와 동일) ", port="587") as smtp: 
    try:
        smtp.ehlo() 
        smtp.starttls()  
        smtp.login(" (DISCOURSE_SMTP_USER_NAME과 동일) ", " (DISCOURSE_SMTP_PASSWORD와 동일) ") 
        smtp.send_message(content)  
        print("Complete!")
    except Exception as e:
        print("Error message: ", e)

이렇게 하면 잘 작동합니다. 이는 이메일 SMTP 정보가 정확하고 사용 가능하다는 것을 증명하는 것일까요?

이 문제에 대해 어떤 아이디어가 있을까요?

이메일 서버 부분은 Elastic Email, Mailjet도 시도해 보았지만 여전히 작동하지 않습니다.

결론:

DISCOURSE_HOSTNAME이 localhost인 경우, 이메일 서버는 작동합니다.
DISCOURSE_HOSTNAME을 내부 IP(즉, 로컬 영역 IP)로 변경하면 이메일 서버가 작동하지 않습니다.

정말 감사합니다!!!

감사합니다,
Chieh

업데이트:

처음에는 "축하합니다, Discourse를 설치했습니다!"와 “관리자 계정 등록” 단계에서 이메일을 받을 수 있었고, 다른 기기로 접근할 때 특정 내부 IP로 접속할 수 있었습니다. 그러나 이 단계를 거친 후에는 해당 페이지를 찾을 수 없다는 오류가 발생합니다. 왜 원래는 내부 IP로 접근할 수 있었는데, 이 설정 이후에는 원래의 IP가 무효가 되는 것일까요?
정말 이상하네요 …

문제가 스스로 해결되었습니다.

/etc/hosts로 이동한 후

호스트명을 내 IP로 설정하세요. hostname도 IP로 설정되어 있습니다.

DISCOURSE_HOSTNAME에는 내부 IP를 사용할 수 있습니다.
그렇게 하면 정상적으로 작동합니다.

(물론, 이는 내부 사용에만 해당됩니다.)