如果本地登录已禁用

您好,

我正在搭建一个论坛,对 Discourse 完全陌生,托管在 DigitalOcean 上。不知为何,遇到了 SMTP 或端口问题。现在想了解一下,您是否采用了 Google 登录或社交登录?另外,如果论坛中不提供本地注册/登录功能,是否会有问题?

DO 默认屏蔽 SMTP。 如果您想使用邮件功能,需要寻找一个代理。许多人表示 Mailgun 在云端部署 Discourse 时效果不错,但我个人没有这方面的经验。

这可能正是您需要的:

是的,您可以使用社交登录(Discord、Google 等)或 Discourse ID(无需设置),即使没有 SMTP 也能正常运行。您将无法使用摘要邮件和邮件通知,但如果您的目标仅仅是建立一个社区,即使参与度较低(摘要邮件旨在帮助提高留存率),也能正常工作。

太好了,我尝试过 SendGrid、Mailgun 和 Resend,但都遇到同样的问题。可能是端口问题,我已尝试所有端口。目前我想先确认社交登录是否正常,然后移除本地登录功能。

如果您希望移除本地登录,可以禁用“启用本地登录”站点设置。您也可以尝试 Discourse ID

你好 @abeen,欢迎 :wave:
我在 DigitalOcean(以及其他云服务器)上多次自行部署过使用 Mailgun 和 Resend 的环境。能否提供更多关于你遇到的问题的详细信息?你是否已根据相应设置编辑了 app.yml 文件?我假设这是一次标准安装?

以下是 Resend 的配置示例:

  DISCOURSE_HOSTNAME: <forum.yourforum.etc>
  DISCOURSE_DEVELOPER_EMAILS: <your-email@emailaddress.com>
  DISCOURSE_SMTP_ADDRESS: smtp.resend.com
  DISCOURSE_SMTP_PORT: 2525
  DISCOURSE_SMTP_USER_NAME: resend
  DISCOURSE_SMTP_PASSWORD: "xxxx"

以下是 Mailgun 的配置示例:

  DISCOURSE_HOSTNAME: <forum.yourforum.etc>
  DISCOURSE_DEVELOPER_EMAILS: <your-email@emailaddress.com>
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 2525
  DISCOURSE_SMTP_USER_NAME: <your.mailgun.acccount.email>
  DISCOURSE_SMTP_PASSWORD: "xxxx"

DO 表示:“敬请知悉,除此前已封锁的 25 端口外,自 2025 年 3 月 6 日起,Droplets 上的 465 和 587 端口也已被封锁。此举旨在确保 DigitalOcean 服务器不会被用于发送垃圾邮件。”

我在管理面板中看到:
有 30 个邮件任务失败。请检查您的 app.yml 文件,确保邮件服务器设置正确。查看 Sidekiq 中的失败任务

我已重新创建 Resend API,将端口更改为 587,并尝试使用 2525 端口,但均无效。

这是我的 yaml 配置:


LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
DISCOURSE_HOSTNAME: dobato.au
DISCOURSE_DEVELOPER_EMAILS: myemail@outlook.com
DISCOURSE_SMTP_ADDRESS: smtp.resend.com
DISCOURSE_SMTP_USER_NAME: resend
DISCOURSE_SMTP_PASSWORD: “re_my password here”
DISCOURSE_SMTP_PORT: 2525
DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_NOTIFICATION_EMAIL: noreply@dobato.au
DISCOURSE_SMTP_DOMAIN: dobato.au
  • 这很可能是导致你遇到问题的主要原因:你使用了弯引号。YML 文件不支持这种引号,通常会导致解析失败。你需要使用单引号或双直引号,例如 'password'"password"
  • 你是在子域名上进行了标准安装,还是在根域名上安装?如果是前者,它应该是类似 forum.dobato.audiscourse.dobato.au 的形式(请检查你的域名服务器记录)。除非你确实打算在根域名上安装,否则需要修正此项。
  • 这一行是多余的,请删除。
  • 虽然 Resend 支持该端口且应该可以工作,但标准端口是 587
  • 这一行不需要;强制邮件发送器启动 STARTTLS 没有意义——底层的 Ruby 邮件库(ActionMailer)默认使用 enable_starttls_auto: true,这意味着如果服务器(Resend)支持,它会自动将连接升级为 TLS。请删除这一行。

你的正确 app.yml 部分应如下所示:

DISCOURSE_HOSTNAME: dobato.au #(请核实此项,它可能不正确!)
DISCOURSE_DEVELOPER_EMAILS: myemail@outlook.com
DISCOURSE_SMTP_ADDRESS: smtp.resend.com
DISCOURSE_SMTP_USER_NAME: resend
DISCOURSE_SMTP_PASSWORD: "re_actual_api_key_here" # 注意使用直引号!
DISCOURSE_SMTP_PORT: 587
DISCOURSE_NOTIFICATION_EMAIL: noreply@dobato.au

YML 文件对语法和空格非常严格,因此保留现有模板文件的格式非常重要(参见 https://github.com/discourse/discourse_docker/blob/main/samples/standalone.yml)

但 DigitalOcean 已封锁了 587 端口,因此使用了 2525 端口。

哦,我忘了 DigitalOcean,哈哈。:woman_facepalming:t2: 我早就从他们那里迁移走了。我脑子里想的是 Resend 和 Hetzner。所以是的,使用 2525(我现在想起来,迁移时也换成了这个)。
编辑:我修改了帖子。谢谢 Jakee

除了上述出色的建议外,运行 rake emails:test(参见 Troubleshoot email on a new Discourse install

我的网站现在崩溃了。这是一个新网站,成员很少,不确定如何下载我的自定义页面和成员信息。我完全不想使用 SMTP。

很抱歉你遇到了这个问题。

是的,你的 yml 文件很可能出错了。请把整个文件贴在这里(请隐去邮箱地址和密码)。本来不应该这么难就能运行起来的。

只是出于好奇,你在使用 DigitalOcean 时选的是哪种规格的 Droplet?

你是否已经确认你的域名服务器配置正确?

您好,

我的配置是:基础版 / 1 vCPU / 2 GB 内存 / 50 GB 磁盘

env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
DISCOURSE_HOSTNAME: dobato.au
DISCOURSE_DEVELOPER_EMAILS: myemail@outlook.com
DISCOURSE_SMTP_ADDRESS: smtp.resend.com
DISCOURSE_SMTP_USER_NAME: resend
DISCOURSE_SMTP_PASSWORD: re_mypassword
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_NOTIFICATION_EMAIL: noreply@dobato.au
DISCOURSE_SMTP_DOMAIN: dobato.au
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_FROM_ADDRESS: noreply@dobato.au
UNICORN_WORKERS: 4

我不想使用 SMTP。通过搜索相关问题并执行一些命令后,发现 Nginx 和 Unicorn 未运行。

请仔细阅读我之前的 帖子。你的 yml 文件不正确。

这对于非繁忙的论坛应该可以运行。你有交换文件吗?在命令行运行 free -h 并将输出结果发布在这里。

curl: (52) 服务器返回空响应
root@dobato:~# free -h
total used free shared buff/cache available
Mem: 1.9Gi 201Mi 1.2Gi 4.0Mi 507Mi 1.6Gi
Swap: 2.0Gi 0B 2.0Gi

在亚马逊 Lightsail 上部署 Discourse 怎么样?他们还提供 Amazon SES SMTP 邮件服务。

@abeen 你是否已将它们改为直引号?

请尝试改用以下符号:

"

我得到了“ ”,即双引号

明白了。在 Lightsail 上配合 SES 托管 Discourse 是可行的(这里有些用户就是这样做的)。或者,如果您尚未尝试,可以试试端口 2525。但如果您想避免这些端口问题,可以考虑更换主机,例如 Hetzner 或 Lightsail。

使用此配置后,重建过程结束得太快了……不知原因?