我的 Discourse 站点是 WordPress 站点的 SSO 客户端。Discourse 用户是在 WordPress 用户登录时自动创建的。几乎没有任何用户实际访问过论坛。我已设置每日摘要邮件,并将该设置回溯应用到所有现有的 Discourse 用户。目前的问题是,这些摘要邮件似乎只发送给曾经访问过论坛的 Discourse 账户。我希望用户一旦在 Discourse 中创建账户,就能立即开始接收摘要邮件。请问目前观察到的邮件发送行为是否为默认设置?如果是,该如何解决?
您是否知道用户在首次从 WordPress 登录到 Discourse 之前,是否需要回复 Discourse 的激活邮件?如果您在 WordPress 网站上未使用默认的 WordPress 注册方法,就会出现这种情况。这意味着,在用户回复邮件之前,他们在 Discourse 上不会被标记为 active(活跃)。摘要邮件仅发送给在 Discourse 上被标记为 active 的用户。
我们的 WordPress 注册流程进行了大量自定义,但我检查的所有 Discourse 用户状态均显示为“活跃”。不过,“最后发送邮件时间”和“最后访问时间”字段均为空白。
我在想是否可能存在一个 bug?我所有的设置看起来都已就位。我能想到的唯一原因是,我将“抑制摘要邮件的天数”设置为 3650,并且由于我的用户从未登录过,他们的邮件被抑制了。此外,我曾一度为所有用户禁用了邮件,但当前该设置并未启用。
我想就是这样。摘要邮件会显示自您上次访问以来的内容摘要。如果您从未访问过,就没有“自上次访问以来”的内容。
这似乎是问题的根源。代码 正在检查以下内容:
.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 天前,然后才发送邮件。增加该设置的值应该可以解决您的问题。将该值设置为较大的天数存在的风险是,您可能会向对网站不感兴趣的用户发送摘要邮件。
这起到了一点作用,但并未解决问题。为了测试,我将摘要邮件的频率设置为 30 分钟,并将每日最大通知数设置为 1。我将“最后可见”设置改为 365000。基本上,过去 17 天内加入 Discourse 的用户收到了邮件,一些近期活跃但注册时间较早的用户也收到了邮件。我可以确认所有用户均已激活——至少从我随机抽查的未收到邮件的用户来看是这样。不确定该如何解决此问题。有什么可以手动重置的吗?
我进一步调查后发现,更改频率时,大多数账户的摘要邮件偏好设置并未生效。例如,当我将摘要频率从 30 分钟改为 1 小时,并确认对所有账户应用此更改时,该设置似乎并未生效。我通过模拟那些未收到邮件的账户验证了这一点:他们的偏好设置中摘要功能仍处于关闭状态。