Discourse で読み取り専用メーリングリストをミラーリングする

:bookmark: このガイドでは、Discourse を使用してメーリングリストの読み取り専用ミラーを作成する方法を説明します。必要なサイト設定、カテゴリ構成、および購読プロセスについて説明します。

:person_raising_hand: 必要なユーザーレベル: 管理者

Discourse は、登録ユーザーがその機能のほとんどを利用できるようにしながら、メーリングリストのアーカイブとして機能することができます。このガイドでは、独自のメーリングリストミラーを設定する手順を説明します。

:eyes: Ruby-Talk メーリングリストミラー で実際に動作している様子をご覧ください。

概要

  • Eメール処理のためのサイト設定の構成
  • メーリングリスト用のカテゴリの作成または変更
  • メーリングリストへの購読
  • ミラーリングプロセスの仕組みの理解

以下のガイドでは、プレースホルダーとして 2 つのメールアドレスを使用します。これらを実際のメールアドレスに置き換える必要があります。

discourse@example.com は、Discourse への着信メールのアドレスです。
mailing-list@foo.test は、メーリングリストの投稿アドレスです[1]

サイト設定の構成

  1. 受信メールを事前に構成するホスティングプランを利用していない場合は、Discourse のメールアドレスに関連付けられたアカウント(例: discourse@example.com)に対して、POP3 ポーリングまたは API による手動ポーリングを設定します。

  2. 次のサイト設定を有効にします。

    • email_in: 受信メールを許可する
    • enable_staged_users: ステージング済みユーザーを有効にする(ミラーリングプロセスに不可欠)
  3. オプション設定:

    • authorized_extensions* に設定するか、必要な添付ファイルタイプを許可するために特定のファイル拡張子を追加します。
    • always_show_trimmed_content を有効にして、すべてのユーザーがトリミングされたコンテンツ(image ボタンの背後に隠されています)を表示できるようにします。
    • 名前表示の設定については、display_name_on_posts を有効にし、prioritize_username_in_ux を無効にします。

カテゴリの作成または変更

  1. メーリングリストの投稿用に新しいカテゴリを作成するか、既存のカテゴリを変更します。

  2. カテゴリのアクセス許可を設定します。

    • 「セキュリティ」タブをクリックし、「アクセス許可の編集」をクリックします。
    • 既存のアクセス許可をすべて削除します。
    • 「everyone」に「表示」アクセス許可を追加します。

完了すると、次のようになります。

  1. カテゴリ設定を構成します。

    • 「設定」タブをクリックします。
    • 「アカウントを持たない匿名ユーザーからのメールを受け入れる」を有効にします。
    • 「カスタム受信メールアドレス」をメーリングリストのメールアドレス(例: mailing-list@foo.test)に設定します。
    • 「カテゴリがメーリングリストをミラーリングする」を有効にします。
  2. カテゴリ設定を保存します。

メーリングリストへの購読

  1. Discourse のメールアドレス(例: discourse@example.com)を使用して、メーリングリストに購読します。

  2. メーリングリストに Web インターフェイスがある場合は、次の設定が有効になっていることを確認します。

    • メール配信が有効になっている
    • ダイジェストモードが無効になっている
    • パスワードリマインダーメールが無効になっている

Mailman 2 の場合は、次のように設定されていることを確認します。

  • 「メール配信」が「有効」
  • 「ダイジェストモードの設定」が「オフ」
  • 「このリストのパスワードリマインダーメールを受け取りますか?」が「いいえ」に設定されている

仕組み

「カテゴリがメーリングリストをミラーリングする」を有効にすると、その特定のカテゴリの受信メールの処理方法が変更されます。

  • block_auto_generated_emails が有効になっている場合でも、自動生成されたメールが許可されます。
  • email_in_allowed_groups の設定を無視して、すべてのユーザーがメールで投稿できます。
  • 受信メールは Message-ID を使用して関連する投稿を検索し、find_related_post_with_key の設定に関係なく検索します。
  • Markdown の解釈は、三重のバッククォートで囲まれたコードブロックに限定されます。
  • メーリングリストの投稿について、拒否メールは送信されません。

FAQ

Q: 複数のメーリングリストをミラーリングできますか?
A: はい、メーリングリストごとに個別のカテゴリを作成し、上記のように設定します。

Q: ユーザーは通知に返信してメーリングリストに投稿できますか?
A: いいえ、通知への返信は元のメーリングリストではなく Discourse に送信されます。ユーザーは Discourse を介してメーリングリストに直接投稿することはできません。

Q: ユーザーがメールでミラーリングされたカテゴリに投稿するのを防ぐにはどうすればよいですか?
A: カテゴリはメールでの投稿を許可しますが、不正な投稿を防ぐために受信メールアドレスを非公開に保つことができます。


  1. つまり、人々はこのアドレスに送信してリストに投稿し、このアドレスはリストからメンバーに送信されるメールの To:/CC: 行にも表示されます。 ↩︎

「いいね!」 31

これは、「ユーザーが受信メールアドレスを知っていれば、そのカテゴリに投稿できる」という意味ですか? そのアドレスを誰にも教えないことで、これを防ぐことができますよね?

しかし、誰かがメールで通知を受け取った場合、返信できるはずです。その返信は、Discourse に投稿として送信されるのですか、それともメーリングリストに送信されるのですか?

「いいね!」 2

それは良い質問ですね。

はい、受信メールアドレスを知っていて、かつメーリングリストのアドレスと一致するように From アドレスを詐称できれば、可能だと思います。

いいえと言いたいところですが、この点については100%確信が持てません。なので、たぶん。試してみて教えてください。送信者アドレスの詐称も必要になる可能性があります。

確実にDiscourseに送信されます。

「いいね!」 3

サイトでGoogleグループがカテゴリに転送されていますが、accept emails from anonymousmirrors a mailing list が設定されているにもかかわらず、Email::Receiver::UserNotFoundError でメールが拒否されています。

他にこれをトリガーする可能性のあるものはありますか?

「いいね!」 2

ステージングユーザーを有効にしましたか?

「いいね!」 4

いいえ。ステージングユーザーはオフでした。だから、機能させるにはオンにする必要があるということでしょうか?(理にかなっていますね…)だから、有効にしようとするときに、そのチェックを入れるべきかもしれませんね?

「いいね!」 2

わかりませんが、それが私の最善の推測です。

編集:このエラーが発生する場所はここだけで、次のようになっています。

raise UserNotFoundError unless SiteSetting.enable_staged_users

「いいね!」 4

試してみる必要がありますが、かなりの数の人が返信を試みるだろうと想定しています。これらのオプションの1つ以上があると便利かもしれません。

  1. このカテゴリを購読している人がいても、メールは送信しない。代わりに、メール配信を希望する場合は、{メーリングリストに直接登録するために必要な手順を実行する}という通知(または一度限りのメッセージ)を送信する。

  2. メーリングリストミラーカテゴリからメールが送信される際に、サイト管理者が返信先アドレスを定義できるようにする。(もちろん、カテゴリごとに設定可能。)これにより、ユーザーは配信を有効にせずにそのリストを購読し、Discourseから通知を受け取ることができ、返信した場合、その返信は実際のリストに送信される。

  3. 「カテゴリに返信を転送する」オプション。返信があった場合、別のカテゴリにリンクされたトピックが作成される。例えば、カテゴリ「Announce List」はメーリングリストミラーであり、返信は「Discussion About The Announcements」に作成される。タイトルは検討が必要だ。 :slight_smile:

「いいね!」 3

ガイドはこれを明確にしていますか、@gerhard

「いいね!」 3

いいえ、そうではありませんでしたが、今はそうです。

「いいね!」 5

ありがとうございます。これは以前、このカテゴリへの投稿のためにステージングされたユーザーを(おそらく)特別に処理していると仮定していたため、混乱していました。

「いいね!」 4

Discourse アカウントを作成し、Google グループのメンバーにすることで、双方向通信は可能になりますか?そうすれば、フォーラムへの投稿は、あたかもそのユーザーがメール リストのメンバーであるかのように GG に送信されます(ループを回避するために、そのユーザーからのすべての受信メールを拒否する必要があります)。これは、ユーザーが移行する際に Discourse と GG を並行して実行する方法として質問しています。

Google グループのメーリングリストを正常にミラーリングしていますが、トピックの返信を認識しません。Google トピック 1 と、それとは別に Re: Google トピック 1 の投稿になってしまいます。トピック スレッドを認識させる方法はありますか?