遇到个奇怪问题,Discource不调用SMTP,而是用到了sendmail?

在电子邮件设置,测试发送,QQ邮箱能够收到了,但是在首页用邮箱注册是失败的,查看日志,显示的错误是:

Job exception: Delivery failed with exitstatus 127: "/usr/sbin/sendmail -i -f \"[email protected]\" -- \"[email protected]\""

有人懂这个是啥问题吗?谢谢!

现在有个情况,显示错误是:Job exception: Delivery failed with exitstatus 127: “/usr/sbin/sendmail -i -f "[email protected]" – "[email protected]"”,为什么会这样子,服务器还需要安装 **Sendmail **?

这个问题还真不太清楚是什么问题。

Discourse 的邮件发送是使用队列调用的方式进行的,因此用的是程序。

通常来说你的测试邮件能够收到,后面只要安装没有问题就不会出现问题。

  • 要不你重构一下 Discourse 容器?
  • 换个邮箱进行注册?
  • 查看邮件发送服务器的日志,看着 127 是邮箱服务器的日志中抛出来的吗?

谢谢,大佬回复!我每修改,我都是点重建的。

查看错误的日志是:

mail-2.8.1/lib/mail/network/delivery_methods/sendmail.rb:91:in `block in popen' 
<internal:kernel>:90:in `tap'
mail-2.8.1/lib/mail/network/delivery_methods/sendmail.rb:89:in `popen' 
mail-2.8.1/lib/mail/network/delivery_methods/sendmail.rb:106:in `old_deliver' 
mail-2.8.1/lib/mail/network/delivery_methods/sendmail.rb:69:in `deliver!' 
mail-2.8.1/lib/mail/message.rb:269:in `deliver!' 
/opt/bitnami/ruby/lib/ruby/3.2.0/delegate.rb:87:in `method_missing'
/opt/bitnami/discourse/lib/email/sender.rb:296:in `send' 
/opt/bitnami/discourse/app/jobs/regular/user_email.rb:79:in `send_user_email' 
/opt/bitnami/discourse/app/jobs/regular/user_email.rb:39:in `execute' 
/opt/bitnami/discourse/app/jobs/base.rb:305:in `block (2 levels) in perform' 
rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
rails_multisite-6.0.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/opt/bitnami/discourse/app/jobs/base.rb:292:in `block in perform' 
/opt/bitnami/discourse/app/jobs/base.rb:288:in `each' 
/opt/bitnami/discourse/app/jobs/base.rb:288:in `perform' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in `execute_job' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in `block (2 levels) in process' 
sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in `block in invoke' 
/opt/bitnami/discourse/lib/sidekiq/pausable.rb:132:in `call' 
sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in `block in invoke' 
sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in `invoke' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in `block in process' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch' 
sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in `local' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch' 
sidekiq-6.5.12/lib/sidekiq/rails.rb:14:in `block in call' 
activesupport-7.1.3.4/lib/active_support/reloader.rb:77:in `block in wrap' 
activesupport-7.1.3.4/lib/active_support/execution_wrapper.rb:92:in `wrap' 
activesupport-7.1.3.4/lib/active_support/reloader.rb:74:in `wrap' 
sidekiq-6.5.12/lib/sidekiq/rails.rb:13:in `call' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in `stats' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch' 
sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in `call' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch' 
sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in `global' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in `block in dispatch' 
sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in `prepare' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in `dispatch' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in `process' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in `process_one' 
sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in `run' 
sidekiq-6.5.12/lib/sidekiq/component.rb:8:in `watchdog' 
sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread'

你这个错误更像是容器调度错误。

你看看发送邮件里面有没有要发送出去的邮件?

在这个位置。


有的,发送测试,成功就会在这里显示,

如果这里有显示,那么说明邮件程序配置应该是没有问题的。

现在你的问题就是用户如果用 QQ 注册就收不到邮件对吗?

拿你换其他邮箱,Gmail 这些会有问题吗?

任何邮箱注册都出错,然后错误日志会显示 Job exception: Delivery failed with exitstatus 127:, 队列一直这样,一直尝试错误。。。 :joy:

挺奇怪的错误。

对于这些错误你的邮件服务器上有日志这些吗?

如果没有的话,就说明你的 Discourse 安装实例并没有把邮件发送请求发送到服务器上。

你的 Discourse 实例上有没有安装防火墙什么的?如果有,那么关闭下。

如果实在无法解决问题,那么可能是你的 Discourse 安装实例的问题。

你是在什么环境下安装的?

没有安装有防火墙的,我是用1panel面板,一键安装的

那不知道有没有可能是安装的时候有依赖没有下全,或者什么的。

可以不用他们的一键安装,试试 Discourse 的源代码安装方式,就是 GitHub 下载代码的方式安装。

感谢你的回复,太谢谢了,就是不懂安装,我看看如何安装

可以使用下我们社区的搜索功能,针对邮件的问题,貌似有讨论过:1panel面板 docker安装discourse - #2 by gulu

有关安装,可以参考下:Discourse CentOS 8 全新安装手册 这篇文章。

感谢,老师,我又重新了,然后又用阿里云的25端口,测试是没有问题,还是那点,用户注册出错,无语死了:

Jobs::HandledExceptionWrapper: Wrapped Mail::Sendmail::DeliveryError: Delivery failed with exitstatus 127: "/usr/sbin/sendmail -i -f

总感觉你这个是机房配置和机器的问题。

如果一直出现这个问题,建议考虑换个机房试试。

老师,你好!发行版本 debian,内核版本 6.1.0-25-amd64,系统类型 x86_64,
4核8G,独服,欧州的机房,老牌服务商,应该没有问题吧?

这个应该是没有问题的,但操作系统?

能不能换个操作系统,用 ubuntu 试试?

虽然你选的操作系统和 ubuntu 是一套的,但官方的测试安装是在 ubuntu 上测的。

1 Like

感谢,正有此想法,周末好快呀!

我这边昨天,打算部署在国内试一下,阿里云的vps 2核4g,系统是ubuntu,安装了,然后晚上看下,cpu直接拉满100%,现在正在看看,是啥问题的。

1 Like

更换了系统,用上了ubuntu22.4,还是没有,就是奇怪在这点,为什么需要到:
Jobs::HandledExceptionWrapper: Wrapped Mail::Sendmail::DeliveryError: Delivery failed with exitstatus 127: "/usr/sbin/sendmail -i -f

这真的是挺奇怪的。

有没有可能换个机房再试试看?如果换个机房也有问题的话,我觉得可能是 SMTP 的问题了。

只能是这样一步一步的排查了。