PostfixでDiscourseを動作させる方法

こんにちは。Docker を使用せずにローカルサーバーで Discourse を実行しています。また、iRedMail もインストール済みです。最初は mail.ru の SMTP サーバーを使用しようとしました。テストメールや招待メールは送信されましたが、メール通知は届かず、パスワードリセットも機能しませんでした。そこで、ローカルメールサーバーをインストールし、なぜメッセージが送信されないのかログを確認することにしました。ローカルメールボックス間のメッセージは正常に届きます。これはテストには十分だと考えました。Discourse とメールのローカル環境としてはこれで十分だろうと思い、ローカル SMTP サーバーを設定してテストメールを送信しました…そして無事に届きました!勝利(いいえ)。次に、メールサーバーの /var/log/mail.log を確認しました。


さて、同じボックスに招待メールを送信してみます…メールサーバーのログを確認すると…何も表示されません。ログは空です。問題が何なのか分かりません。
私が求めているのは、Discourse を Postfix と連携させるための「手順」です。
現在、検証メールが届かなかったため、手動で管理者アカウントを有効化しています。必要に応じて設定ファイルやログなどのファイルを提供いたします。

@Anv さん

Discourse Meta へようこそ。

通常、このような問題が発生した際は、以下のようなコマンドを実行します。

sendmail -vvv A_VALID_EMAIL_ADDRESS < email.txt

これにより、あなたと SMTP サーバー間のハンドシェイクの詳細な出力が表示されます。通常、この詳細なログから問題解決の手がかりが得られます。

お役に立てれば幸いです。

「いいね!」 1

こんにちは!私はあまり経験がありません。初めて Discourse とメールサーバーをインストールしました。具体的に何をする必要があるのか、詳しく教えていただけますか?ありがとうございます。

@Anv さん、こんにちは

まず、Discourse のことは一時的に忘れ、SMTP メールリレーのセットアップ、テスト、そしてメールのリレーが可能であることを確認することに集中してください。

この部分はすでに行われましたか?

「いいね!」 1

このリンクを使って iRedMail をインストールしました。

ステップ 5 と 9 は省略しました。

@Anv さん、こんにちは

確かに、これは高度なインストールですね。

Discourse を使わずに、正常に動作するかテストされましたか?

例えば、以下のようにです:

sendmail -vvv A_VALID_EMAIL_ADDRESS < email.txt

?

ローカルドメイン「@ugda.space」に2つのメールボックスを作成しました。すると、それらのメールボックス間でメッセージが行き来してしまいます。Gmail、Mail.ru、Yandex のボックス間では、メッセージは行き来しません。テストにはローカル間での通信だけで十分だと考えたため、設定は行いませんでした。

@Anv 率直に言いますね。良い不文律とは、「あなたが相手の話を聞く努力をする気がないなら、相手に話しかけるよう求めないこと」のようなものです。ここで言う「聞く」とは、相手が言っていることを真剣に考慮することです。フォーラムに参加することも、相手と話してもらうよう求めていることになると考えられます。特に助けを求めている場合ならなおさらです。

同じことを繰り返しても、相手に同じことを繰り返させるだけでは、誰にとっても何も進みません。

ところで、なぜまだこのコマンドを実行していないのでしょうか?

申し訳ありません。私が何をすべきか十分に理解していなかったようです。私はすべて正しくできましたか?

@Anv さん、こんにちは

お気持ちお察しします。毎回 SMTP リレーの問題をデバッグするだけの時間がないこと、お詫び申し上げます。

どうやら SMTP メールホストはメールを受信しているようですが、それが SMTP リレーとして機能するとは限りません。

私の記憶では、sendmail やその他のメールクライアントを使って SMTP ホストが正しくリレーとして機能しているかを確認するフラグがあったはずです。sendmail -G オプションについて調べてみるか、他のテスト方法を探してみてください。基本的には、新しく設定した SMTP ホストをリレーとして使用し、作業中のホストとは異なるテスト用メールアドレスにメールを送信する必要があります。

歴史的背景

昔は、ほとんどの SMTP ホストがそのままリレー機能を提供していましたが、その後、スパマーがリレー機能(所有者には知られていない)を悪用して世界中にスパムを送りつけるようになり、ネット上の SMTP ホストは巨大なスパムボックスになってしまいました。

結論として、新しく設定した SMTP ホストがメールをリレーできるかどうかを確認する必要があります。

設定チュートリアルの内容をよく確認し、SMTP ホストをリレーとして設定する記述があったかどうかを確認しましたか?

単に考えを口に出しただけですが、これがあなたの SMTP ホストプロジェクトの次のステップに進むのに少しでも役立てば幸いです。

わかった、あなたの言っていることは理解できたよ。これについて何か情報を見つけられるか探してみるね。

「いいね!」 1

Discourse を Docker 없이インストールされているとのことですが、この新規インストール時に作成したメールアドレスを使用して、Docker による「クラシック」な方法で新規インストールを行うことは可能でしょうか?あるいは、お使いのマシンで Docker を実行できないのでしょうか?

「いいね!」 1

Dockerで試してみましたが、メールは一切届きませんでした。管理者アカウントすら作成できませんでした。経験不足を理由に、Dockerを排除することにしました。

@Mevo さん、@Anv さん、こんにちは。

朝です。

あまり参考にならないかもしれませんが、「単なるデータポイントの1つ」として、Docker ベースの本番環境でも、macOS のデスクトップで「Docker なし」の dev 環境でも、Discourse への SMTP メールの設定で問題に直面したことはありません。ただし、常にサードパーティの SMTP サービスを利用していました。

みなさんのご報告に注目しています。この小さな謎に非常に興味を持ち、今後数週間のうちに VPS Ubuntu Linux 環境で SMTP リレーを設定し、「古風な」SMTP リレーと「サードパーティのソリューション」に依存しない方法で Discourse が連携できるか試してみたいと思います。

この設定の構築に数週間かかる場合は、あらかじめお詫び申し上げます。Discourse プラグイン開発の学習や、Rails が多数の要素とどう連携するかを学ぶのに夢中になりすぎて、退屈な政府の書類仕事が後回しになっているためです。

「いいね!」 1

こんにちは、@neounix さん。

とにかく、この件で手伝ってくれて本当にありがとうございます。

もしかすると私の主な問題は、外部ネットワークからのアクセスがない LAN 内でこれを実行したいということです。

招待送信中の Discourse ログ

ログに ID が付いたメールがあると記載されています。
この ID の言及を探しました
1 ID - テストメッセージ
2 ID - 招待

image

いくつかの試行錯誤の後、Discourse を Postfix と連携させることができました。以下に私が使用した手順を示します。参考になれば幸いです。

  1. 新しいサーバーを指す A レコードを設定します(例:forum.domain.com)。

  2. Postfix をインストールし、myhostnameforum.domain.com を設定します。また、Discourse コンテナが認証なしで Postfix と通信できるよう、mynetworks172.17.0.0/16 を追加します。172.17.0.0/16 は Docker コンテナでデフォルトで使用されるネットワークです。

  3. Postfix がメールを送信できることを確認します。私は swaks を使うことをお勧めします。

    swaks -t your_name@gmail.com
    

    「This is a test mailing」というメールが届くはずです。

  4. containers/app.yml で、DISCOURSE_SMTP_USER_NAMEDISCOURSE_SMTP_PASSWORDDISCOURSE_SMTP_ENABLE_START_TLS の 3 行をコメントアウトしてください。

    また、DISCOURSE_SMTP_DOMAINforum.domain.com に設定します(ここで実際のドメイン名に置き換えてください)。

  5. テストするには、docker exec -it app bash で Discourse コンテナに接続し、以下のコマンドを実行します。

    apt update
    apt install -y swaks
    swaks -t name@gmail.com --server forum.domain.com
    

    「This is a test mailing」というメールが届くはずです。

  6. ./launcher rebuild app で Discourse を再起動します。これで新しいアカウントの作成と認証メールの受信が可能になります。

「いいね!」 2