안녕하세요,
이 문제는 잘 알려진 이슈이며, 비교적 쉽게 발생할 수 있는 문제입니다. 많은 테스트를 해보았지만, “이메일 전송” 단계에서 막혀 있습니다.
아래 링크의 가이드를 따랐습니다: 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