各位好,
我知道这是一个已知问题,而且很容易遇到。我已经阅读并尝试了许多测试,但目前在“发送邮件”这一步卡住了。
我参考了 https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md,以下是我的操作步骤:
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)在浏览器中访问。
第二次尝试
因此,我只修改了 DISCOURSE_HOSTNAME,没有更改 app.yml 中的其他信息。
DISCOURSE_HOSTNAME : '10.1.3.91'
注:10.1.3.91 是我的内部(局域网)IP 地址。
将主机名更改为此后,我可以在浏览器中访问它。但是,邮件服务器无法再正常工作,我无法收到来自 Discourse 的邮件。
补充说明
我尝试使用 Python 通过我的 SMTP 发送邮件。
脚本如下:
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("完成!")
except Exception as e:
print("错误信息:", e)
它可以正常工作。这是否证明邮件 SMTP 信息是正确的并且可以使用?
关于这个问题,有什么建议吗?
在邮件服务器方面,我还尝试过 Elastic Email 和 Mailjet,但仍然无法工作。
结论:
如果 DISCOURSE_HOSTNAME 使用 localhost,邮件服务器可以工作。
如果 DISCOURSE_HOSTNAME 更改为内部 IP(即局域网 IP),邮件服务器无法工作。
非常感谢!!!
此致,
Chieh