hostmail 设置问题

你好。希望你介意我劫持这个帖子。

我的托管服务提供商在电子邮件方面没有任何问题。使用各种工具进行的所有测试都可以正常工作——端口已打开,应该能够发送邮件。问题是——它不能与 Discourse 一起使用。

https://carlosthomas.net/photos/picture.php?/911/category/8

无论我尝试哪个端口,我仍然会收到相同的错误。

我手动创建了帐户并且可以登录,但邀请和验证需要电子邮件。我使用 MailGun 进行了测试,它有效——但我无法弄清楚为什么它不能与我的托管服务提供商一起使用。我联系了他们,他们说一切都应该没问题——所以我有点不知所措。

https://carlosthomas.net/photos/picture.php?/913/category/8

作为一个新用户,我只能发布两个链接——但那些应该会带你去看其余的照片。

如果您需要我提取任何日志,请告诉我——我的 *NIX 经验有限,但我可以按照说明操作。提前感谢。

感谢 @JammyDodger 的拆分/移动。希望在此事上能得到一些帮助。服务器不是永久性的——它是用于测试的——所以任何所需的日志或命令都可以提供以找到解决方案。

基本上——电子邮件(大部分)可以使用 MailGun 发送,但不能使用托管提供商发送。从 MailGun 发送给免费服务(GMAIL 等)的电子邮件工作正常。尝试从 MailGun 发送给我的域名/托管电子邮件失败。不确定发生了什么。域名电子邮件在任何其他应用程序中都可以正常使用——OSTicket/InvoiceNinja/Windows Mail/ThunderBird/等。

任何帮助都将不胜感激。提前致谢。

如果您的 hostmail 凭据在其他工具中可用,并且假设它已正确粘贴到 discourse 配置中,那确实很奇怪。您是否有可能会阻止 hostmail 域的安全工具?

您也可以尝试查看 \u003cdiscourse_url\u003e/logs 来查看发生了什么事的详细错误。

感谢您的回复。以下是一些信息。

Message (12 copies reported)

Job exception: execution expired


Backtrace

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/net-smtp-0.4.0/lib/net/smtp.rb:631:in `initialize'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/net-smtp-0.4.0/lib/net/smtp.rb:631:in `open'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/net-smtp-0.4.0/lib/net/smtp.rb:631:in `tcp_socket'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/net-smtp-0.4.0/lib/net/smtp.rb:641:in `block in do_start'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/timeout-0.4.0/lib/timeout.rb:186:in `block in timeout'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/timeout-0.4.0/lib/timeout.rb:193:in `timeout'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/net-smtp-0.4.0/lib/net/smtp.rb:640:in `do_start'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/net-smtp-0.4.0/lib/net/smtp.rb:610:in `start'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'

所以澄清一下——“hostmail”只是我给它起的名字,因为它是我的托管提供商 (GlowHost) 的电子邮件,来自我正在测试的域名——discourse.carlosthomas.net——它与 MailGun 的配合效果“大部分”可以——但与托管电子邮件配合则不行。

我之前不知道 /logs 的存在——如果需要的话,我可以重新配置设置并清除日志,然后尝试发送电子邮件并发布信息。我也可以现在就清除日志——发送到 Gmail——这将成功——然后发送到我的托管电子邮件——这将失败——然后发送日志。

添加一些背景信息。朋友们正在运行一个 vBulletin 4.2.5 网站,我暂时为他们托管 Discourse 以便他们体验。问题出在电子邮件上——我能按照说明手动创建账户,但如果他们决定使用 Discourse,就需要电子邮件来添加用户。还有导入部分——我找到了这个链接,我认为可能会有帮助。

但电子邮件问题需要解决。我只会在我们解决这个问题之前保留运行 Discourse 的服务器。我也有点想展示一下这里的支持情况。我在论坛上看到的细节以及我的经验表明,一旦满足托管平台的先决条件,使用/迁移/支持应该会相当容易。一旦使用了官方方法,获得支持应该就足够容易了。

但是的——我们现在就在这里。等待反馈。

1 个赞

大家好。如果一切顺利,我将在周末尝试一些操作。我打算进行擦除/重装并发布进展。在此之前,如果您有任何建议,请告诉我。

一旦我进行到那一步,我打算提取所有能找到的日志并在此发布。我将在过程中使用一些随机生成的密码,以便想提供帮助的人可以访问。让我们看看进展如何。

正在检查和更改 app.yml 文件 - 之前已清除日志 - 将尝试发送电子邮件并告知。

编辑
因此,清除日志并向 Gmail 或我自己的域发送电子邮件没有显示错误。我收到了 Gmail 的邮件,但没有收到我的域的邮件。

MailGun 的日志基本上是这样说的:

{
	"recipient": "me@mydomain",
	"id": "SCBCSJxDSqupdU9Da29rRw",
	"envelope": {
		"sender": "postmaster@mg.mydomain",
		"targets": "me@mydomain",
		"transport": "smtp",
		"sending-ip": "192.168.0.1"
	},
	"timestamp": 1697462206.8430145,
	"user-variables": {},
	"message": {
		"headers": {
			"from": "Discourse Test Forum <postmaster@mg.mydomain>",
			"message-id": "9d3b190d-bcbd-4378-8eb6-fc90cd57fe35@discourse.mydomain",
			"to": "me@mydomain",
			"subject": "[Discourse Test Forum] Email Deliverability Test"
		},
		"attachments": [],
		"size": 4546
	},
	"storage": {
		"region": "us-west1",
		"key": "BAABAQUOTl3y4PtvsqlN5Z2OvaxXslLlZA",
		"env": "production",
		"url": "https://storage-us-west1.api.mailgun.net/v3/domains/mg.mydomain/messages/BAABAQUOTl3y4PtvsqlN5Z2OvaxXslLlZA"
	},
	"reason": "generic",
	"delivery-status": {
		"enhanced-code": "",
		"mx-host": "mydomain",
		"description": "",
		"certificate-verified": true,
		"attempt-no": 1,
		"code": 550,
		"message": "Verification failed for <bounce+674b6a.be6180c-me=mydomain@mg.mydomain>\nThe mail server does not recognize bounce+674b6a.be6180c-me=mydomain@mg.mydomain as a valid sender.\nSender verify failed",
		"session-seconds": 40.878,
		"tls": true
	},
	"campaigns": [],
	"severity": "permanent",
	"tags": [],
	"recipient-domain": "mydomain",
	"flags": {
		"is-routed": false,
		"is-authenticated": true,
		"is-test-mode": false,
		"is-system-test": false
	},
	"log-level": "error",
	"event": "failed"
}

我只会在尝试我的域时收到此消息。如果我尝试任何其他域,它都可以正常工作 - 无论是免费邮件还是付费邮件。

app.yml 中的当前设置是:

## 这是全合一、独立的 Discourse Docker 容器模板
##
## 更改此文件后,您必须重建
## /var/discourse/launcher rebuild app
##
## 请务必小心编辑!
## YAML 文件对空格或对齐错误非常非常敏感!
## 如有需要,请访问 http://www.yamllint.com/ 进行验证

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## 取消注释下一行以启用 IPv6 侦听器
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## 如果您希望添加 Lets Encrypt (https),请取消注释这两行
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## 此容器应暴露哪些 TCP/IP 端口?
## 如果您希望 Discourse 与 Apache 或 nginx 等其他 Web 服务器共享端口,
## 请参阅 https://meta.discourse.org/t/17247 获取详细信息
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## 将 db_shared_buffers 设置为总内存的最多 25%。
  ## 将由 bootstrap 根据检测到的 RAM 自动设置,或者您可以覆盖它
  db_shared_buffers: "2048MB"

  ## 可以提高排序性能,但会增加每个连接的内存使用量
  #db_work_mem: "40MB"

  ## 此容器应使用哪个 Git 版本? (默认: tests-passed)
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## 支持多少并发 Web 请求?取决于内存和 CPU 核心。
  ## 将由 bootstrap 根据检测到的 CPU 自动设置,或者您可以覆盖它
  UNICORN_WORKERS: 8

  ## TODO: 此 Discourse 实例将响应的域名
  ## 必需。Discourse 不能使用裸 IP 地址。
  DISCOURSE_HOSTNAME: mydomain

  ## 如果您希望容器以与上面指定的相同的主机名 (-h 选项) 启动,请取消注释
  ## (默认值为 "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: 将被设为管理员和开发者的逗号分隔的电子邮件列表
  ## 首次注册时,例如 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'me@mydomain'

  ## TODO: 用于验证新帐户和发送通知的 SMTP 邮件服务器
  # 需要 SMTP 地址、用户名和密码
  # 注意 SMTP 密码中的字符 '#' 可能会导致问题!

  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: postmaster@mg.mydomain
  DISCOURSE_SMTP_PASSWORD: "mailgunpassword"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true             # (可选,默认 true)
  #DISCOURSE_SMTP_FORCE_TLS: true
  DISCOURSE_SMTP_DOMAIN: mydomain
  DISCOURSE_NOTIFICATION_EMAIL: postmaster@mg.mydomain


  ## 如果您添加了 Lets Encrypt 模板,请取消注释下方以获取免费 SSL 证书
  LETSENCRYPT_ACCOUNT_EMAIL: freemailaccount

  ## 此 Discourse 实例的 http 或 https CDN 地址(配置为拉取)
  ## 请参阅 https://meta.discourse.org/t/14857 获取详细信息
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## 用于 IP 地址查找的 maxmind 地理位置 IP 地址密钥
  ## 请参阅 https://meta.discourse.org/t/-/137387/23 获取详细信息
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## Docker 容器是无状态的;所有数据都存储在 /shared 中
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## 插件在此处
## 请参阅 https://meta.discourse.org/t/19157 获取详细信息
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-spoiler-alert.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-docs.git
## 构建后要运行的任何自定义命令
run:
  - exec: echo "Beginning of custom commands"
  ## 如果您想设置首次注册的“发件人”电子邮件地址,请取消注释并进行更改:
  ## 收到首次注册邮件后,请重新注释该行。它只需要运行一次。
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "End of custom commands"

对此所做的唯一更改是:

DISCOURSE_SMTP_ADDRESS: smtp.mydomain
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: email@mydomain
  DISCOURSE_SMTP_PASSWORD: "mydomainmailpassword"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true             # (可选,默认 true)
  #DISCOURSE_SMTP_FORCE_TLS: true
  DISCOURSE_SMTP_DOMAIN: mydomain
  DISCOURSE_NOTIFICATION_EMAIL: email@mydomain

一旦我收到某人的回复,我将进行这些更改并返回日志中检查。或者……也许我直接进行更改——发布日志——然后等待回复。应该不会花太长时间。我们拭目以待。

1 个赞

老实说,我不知道。:thinking: 这似乎不是 Discourse 的问题。我的意思是,邮件是由 Discourse 正确发送的,但 Mailgun 未能将其发送到该电子邮件地址。

错误 550 意为“用户的邮箱不可用(例如,未找到)

1 个赞

感谢您的回复。我不知道是怎么回事——电子邮件工作正常。我猜它只是不喜欢我的域名。

我已经更改了设置,以使用我的域名电子邮件发送。我现在检查一下日志,看看会收到什么错误。

编辑
日志中没有错误——但我收到了这个。

我将尝试从 ./discourse-doctor 进行操作——但日志在 /logs 中确实是空的。

并且我收到了与开头相同的错误。

正在使用的电子邮件地址可以正常工作。我复制粘贴了详细信息,包括密码。我在 ThunderBird / Windows Mail 上测试了相同的电子邮件,没有任何问题。所以……

我之前联系了我的托管提供商支持——这是他们的回复。

所以我不知道。也许有什么我忽略了?使用 465 / 587 发送测试电子邮件没有问题。我束手无策。

是否有任何特殊字符会被阻止或导致电子邮件设置出现问题?

将设置更改为端口 465,并且只在 /logs 中看到此内容。

我认为没有重大后果。

感谢 @Arkshine 至今为止的协助。显然,VPS 无法访问托管域——因此邮件无法正常工作。这很奇怪,但我正在联系托管提供商进行检查。我会更新。

这相当快速和容易。从运行 Discourse 的 VPS 的 SSH 会话 ping 托管域显示了问题所在。让我们看看进展如何。

编辑
希望 @Arkshine 能回复,这样我就可以将其标记为解决方案。无论如何——我收到了托管提供商的回复。显然,他们的服务器由于 SMTP 尝试失败而自动阻止了 VPS IP。不确定那是什么问题——将更改设置并再次运行测试看看。现在应该没问题了——VPS 现在可以 ping 通托管 IP 了。测试了电子邮件设置,一切正常!

希望这些信息能帮助到其他人。如果我能编辑 OP,我就会放一个 TLDR——或者他们可以直接点击链接找到解决方案。

再次感谢 @Arkshine 的所有帮助。继续保持出色的工作!

2 个赞

我同意,他是一个很好的帮助和资源。 :slight_smile:

3 个赞

还想提一下,他的头像和个人资料背景也很酷。我喜欢。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.