3

我正在运行带有 Rails 3.2.2 的 Ubuntu 10.04。

我刚刚安装并配置了 sendmail。当邮件通过终端发送时,它工作得很好

但是当我尝试通过 Rails 调用它时,没有成功

虽然它看起来并不像它失败了。我没有收到任何错误,并在我的控制台中看到:

#<Mail::Message:40338240, Multipart: false, Headers: <From: alert@email.com>, <To: chris@email.com>, <Subject: Hi chris, a testmail too you!>, <Mime-Version: 1.0>, <Content-Type: text/html>, <importance: High>, <X-Priority: 1>> 

我正在开发中,我的 development.rb 中有以下设置:

config.action_mailer.delivery_method = :sendmail
config.action_mailer.sendmail_settings = { 
      :location => '/usr/sbin/sendmail', 
      :arguments => '-i -t' 
  } 
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true

我已经设置了一个带有相应 alert_mail.html.erb 的 actionmailer:

class UserMailer < ActionMailer::Base
  default from: "alert@email.com"
  def alert_mail(site)
    @site = site
    @user = site.user
    @url  = "http://example.com/login"
    mail(:to => @user.email_address, :subject => "Hi chris, a testmail too you!", :importance => "High", 'X-Priority' => '1')
  end
end

这就是我所说的:

UserMailer.alert_mail(site)

可能是有权限的东西吗?

我尝试过的事情-尝试在生产模式下运行-将 sendmail 可执行文件更改为 777-尝试删除优先级设置-使用 rails 服务器而不是 nginx 运行它

我希望有人可以帮助我,在此先感谢!(email.com 只是一个替代品,我使用的是有效域)

编辑: 当我尝试通过 rails 控制台执行邮件功能时,sadiqxs 的答案确实解决了问题。但是通过我的浏览器,它仍然无法正常工作。奇怪的是,这似乎只发生在 nginx 中。当我停止 nginx 并启动 rails 服务器时,它就可以工作了。但是当我使用 nginx 作为服务器时,它不会发送任何邮件。

4

2 回答 2

1

我想你需要打电话

 UserMailer.alert_mail(site).deliver
于 2013-01-12T16:44:22.597 回答
0

sadiqxs 解决方案是我问题答案的一部分。它解决了我调用函数错误的问题。但它仍然没有为我发送电子邮件。过了一会儿,我设法让它工作。

我发现的一件事是,实际上我确实监督了另一个邮件日志:

/var/log/mail.log.1

它向我显示了以下错误:

sendmail[4453]: NOQUEUE: SYSERR(nobody): can not chdir(/var/spool/mqueue-client/): Permission denied

我用 ls -ld /var/spool/mqueue-client/ 看到目录受smmsp组限制:

drwxrws--- 2 smmsp smmsp 4096 2013-01-12 17:51 /var/spool/mqueue-client/

所以我将nobody用户(来自错误SYSERR(nobody))添加到smmsp组:

usermod -a -G smmsp nobody

我又测试了一遍,还是不行。检查日志后,我得到了同样的错误。为了确保我重新启动了我的服务器,现在错误消息发生了一些变化:

NOQUEUE: SYSERR(nobody): can not write to queue directory /var/spool/mqueue-client/ (RunAsGid=65534, required=115): Permission denied

在搜索并尝试了一段时间无用的东西后,我决定将 /etc/psswd 文件的主要组 nobody 更改为 115 (smmsp) 并看到以下设置:

nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

nobody:x:65534:115:nobody:/nonexistent:/bin/sh

这解决了我的问题,它现在正在发送邮件。我知道这不是最好的解决方案,但我真的不知道如何让任何人访问,因为它需要特定的 GID。我希望这里的其他人会这样做。

于 2013-01-13T10:28:42.823 回答