皆様、こんにちは。
この問題は既知の課題であり、比較的簡単に発生するものです。私は多くのテストを読み、試行してきましたが、「メール送信」のステップで既に詰まってしまいました。
私は以下の手順に従って、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)を使用してブラウザからアクセスすることができません。
2 回目の試行
そのため、DISCOURSE_HOSTNAME のみを変更し、app.yml の他の情報は変更しませんでした。
DISCOURSE_HOSTNAME : '10.1.3.91'
注:10.1.3.91 は私の内部(ローカルエリア)IP です。
このように hostname を変更したところ、ブラウザからアクセスできるようになりました。しかし、メールサーバーが機能しなくなり、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"] = " (my email) "
content["to"] = " (testing email) "
content.attach(MIMEText("Demo python send email"))
with smtplib.SMTP(host=" (as same as DISCOURSE_SMTP_ADDRESS) ", port="587") as smtp:
try:
smtp.ehlo()
smtp.starttls()
smtp.login(" (as same as DISCOURSE_SMTP_USER_NAME) ", " (as same as 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