0

我正在尝试从一个简单的 Ruby on Rails 服务向自己发送通知电子邮件。我一直在遵循http://guides.rubyonrails.org/action_mailer_basics.html上的 ActionMailer 使用指南和http://api.rubyonrails.org/classes/ActionMailer/Base.html上的文档 我基本上是复制/粘贴了指南中的代码,但是当我尝试运行它时出现一堆语法错误。

我四处寻找,但没有遇到任何有同样问题的人。鉴于这一点以及我缺乏使用 Rails 和 Ruby 的经验,我怀疑我可能遗漏了一些基本的东西。

这是我的邮件:

class NotificationMailer < ActionMailer::Base
    default from: 'info@mydomain.com'

  def uploadNotification
    mail(to: "jim@mydomain.com", subject: "Upload Notification")
  end
end

我这样称呼它:

NotificationMailer.uploadNotification.send

当应用程序尝试调用该方法时,我收到以下错误:

SyntaxError (/Users/jimmcgowan/Sites/RoR/upload/app/models/notification_mailer.rb:2: syntax error, unexpected ':', expecting kEND
default from: 'info@mydomain.com'
             ^
/Users/jimmcgowan/Sites/RoR/upload/app/models/notification_mailer.rb:5: syntax error, unexpected ':', expecting ')'
mail(to: "jim@mmydomain.com", subject: "Upload Notification")
        ^
/Users/jimmcgowan/Sites/RoR/upload/app/models/notification_mailer.rb:5: syntax error, unexpected ',', expecting kEND
mail(to: "jim@mmydomain.com", subject: "Upload Notification")
                              ^
/Users/jimmcgowan/Sites/RoR/upload/app/models/notification_mailer.rb:5: syntax error, unexpected ')', expecting kEND):

为了尝试进行更简单的测试,我删除了“default from:”行,将 uploadNotification 方法中的 mail() 调用替换为一个简单的日志,并将调用代码更改为仅 NotificationMailer.uploadNotification。但是,这反而导致了 NoMethodError。

谁能给我一些关于我哪里出错的指示?

更新

看来 bgates 的答案是正确的,这是由 Ruby 1.8 和 1.9 版本的语法差异引起的。但是,在我的托管虚拟服务器(运行旧版本的 Suse)上升级 Ruby 安装是不切实际的,因此我重新编写了类以兼容 Ruby 1.8。为了存档,这里是工作版本:

class NotificationMailer < ActionMailer::Base
  def uploadNotification
    from "My Server <info@mydomain.com>"
    recipients "jim@mydomain.com"
    subject "New Notification"
  end
end

我这样称呼它:

NotificationMailer.deliver_uploadNotification
4

2 回答 2

0

我会做这样的事情:

class NotificationMailer < ActionMailer::Base
    default from: "Mydomain <info@mydomain.com>",
            return_path: "Mydomain <info@mydomain.com>"

    def upload_notification
      mail(:to => "jim@mydomain.com", 
           :subject => "Upload Notification")
    end
end

然后用 .deliver 而不是 .send 调用它

NotificationMailer.upload_notification.deliver
于 2013-07-25T08:34:47.203 回答
0

它抱怨的东西曾经是 Ruby 1.8.x 中的语法错误。如果你输入

$ ruby -v

在命令行中,你得到一个小于 1.9 的数字,你需要将你的 Ruby 更新到一个更新的版本。

于 2013-07-25T06:14:54.640 回答