我正在尝试从一个简单的 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