サマリーメール、新規ユーザー、SSO

私の Discourse サイトは、Wordpress サイトの SSO クライアントとして機能しています。Wordpress サイトにログインしたメンバーに対して、Discourse ユーザーが作成されています。しかし、実際にフォーラムを訪れたユーザーはほとんどいません。毎日要約メールを送信するように設定しており、既存のすべての Discourse ユーザーに対してこの設定を遡って適用しました。問題なのは、これらの要約メールが、過去に一度でもフォーラムを訪れたことのある Discourse アカウントに対してのみ送信されているように見えることです。アカウントが Discourse に存在する時点で、ユーザーが要約メールを受け取れるようにしたいと考えています。メールのこの挙動はデフォルトの動作でしょうか?もしそうであれば、どのようにすれば回避できるでしょうか?

「いいね!」 1

WordPress から Discourse への初回ログイン前に、ユーザーが Discourse のアクティベーションメールに応答する必要があるかどうかご存知ですか?これは、WordPress サイトでデフォルトの WordPress 登録方法を使用していない場合に発生します。つまり、ユーザーはメールに応答するまで Discourse 上で「アクティブ」としてマークされません。要約メールは、Discourse 上で「アクティブ」としてマークされたユーザーにのみ送信されます。

「いいね!」 1

WordPress での登録プロセスにはかなりのカスタマイズが行われていますが、Discourse 内で確認したすべてのユーザーは「アクティブ」に設定されています。ただし、「最終メール送信日時」と「最終アクセス日時」は空白になっています。

バグがあるかもしれませんか?すべての設定は正しく行われているようです。考えられるのは、「 digest メールを何日後に抑制するか」を 3650 日に設定したため、ユーザーが一度もメールを受け取っていない状態で抑制されてしまっていることです。また、以前は全ユーザーに対してメールを抑制していましたが、現在はその設定は解除されています。

「いいね!」 1

その通りだと思います。サマリーメールは、前回アクセスしてから現在までのまとめを表示するものです。一度もアクセスしたことがなければ、「前回アクセスしてから」という期間が存在しません。

「いいね!」 3

それが問題の原因のようです。コード は以下を確認しています:

.where("COALESCE(last_seen_at, '2010-01-01') >= CURRENT_TIMESTAMP - ('1 DAY'::INTERVAL * #{SiteSetting.suppress_digest_email_after_days})")

last_seen_at は新規ユーザーに対して nil を返すため、コードは電子メールを送信する前に「2010-01-01」が 3650 日前より新しいかどうかを確認します。その設定値を増やすことで、問題が解決するはずです。ただし、その値を非常に大きな日数に設定するリスクとして、サイトに関心のないユーザーにサマリー電子メールを送信してしまう可能性があります。

「いいね!」 3

少しは改善されましたが、問題は解決しませんでした。テストのため、サマリーメールの頻度を30分に、1日あたりの最大通知数を1に設定しました。また、「最後に確認された」設定を365000に設定しました。基本的には、過去17日以内にDiscourseに追加されたユーザーにはメールが届き、最近確認されたが以前に作成された一部のユーザーにもメールが届きました。すべてのユーザーがアクティブ化されていることを確認できます(少なくとも、メールを受け取らなかったユーザーのランダムなサンプルから確認できます)。この問題を修正する方法がわかりません。手動でリセットできるものはありますか?

もう少し調査したところ、頻度を変更しても、ほとんどのアカウントでサマリーメールの優先設定が反映されていないようです。つまり、サマリーの頻度を「30 分」から「1 時間」に変更し、「すべてのアカウントに適用」を確認しても、設定が適用されていないように見えます。メールを受信していないアカウントを偽装して確認したところ、そのアカウントの優先設定ではサマリーがオフになっていることがわかりました。

「いいね!」 1