Rails:如何单独使用ActionMailer?

时间:2012-04-30 22:09:09

标签: ruby-on-rails ruby actionmailer

我正在创建一个用于发送电子邮件的应用。我不需要使用常规邮件程序和查看模板,因为我只是接收将用于生成电子邮件的数据。但是,我认为使用ActionMailer而不是直接与SMTP进行交互有一些好处。我在尝试实例化ActionMailer::Base的新实例时遇到了问题。如何在不必定义扩展ActionMailer的新类的情况下单独使用ActionMailer::Base

3 个答案:

答案 0 :(得分:7)

ActionMailer的基础功能由mail gem提供。这使您可以非常简单地发送邮件,例如:

Mail.deliver do
  from     'me@test.lindsaar.net'
  to       'you@test.lindsaar.net'
  subject  'Here is the image you wanted'
  body     File.read('body.txt')
  add_file :filename => 'somefile.png', :content => File.read('/somefile.png')
end

它支持通过ActionMailer所做的所有相同方式进行传递。

答案 1 :(得分:2)

这是最基本的解决方案。您必须将smtp设置和硬编码值更改为变量等。这样您就不需要使用View。如果您仍想使用ERB,我建议您查看Railscast 206

只需更改此代码,将其放在“test_email.rb”等文件中,然后使用ruby test_email.rb

调用它
require 'action_mailer'

ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :domain               => "gmail.com",
  :user_name            => "testuser123",
  :password             => "secret",
  :authentication       => "plain",
  :enable_starttls_auto => true
}

class TestMailer < ActionMailer::Base
  default :from => "testuser123@gmail.com"

  # def somemethod()
  #   mail(:to => "John Doe <john@example.com>", :subject => "TEST", :body => "HERE WE GO!!!")
  # end

  def mail(args)
    super
  end
end

# TestMailer.somemethod().deliver
TestMailer.mail(:to => "John Doe <john@example.com>", :subject => "TEST", :body => "HERE WE GO!!!")

答案 2 :(得分:2)

啊,我想我现在好好理解了。基本上你正在寻找一个类似于php的邮件()的简单单行,对吧?

如果是这样,ActionMailer对你没有意义,因为它确实不适合这项工作。

我认为你的赢家是一个叫做Pony的红宝石宝石: https://github.com/benprew/pony

示例:

Pony.mail(:to => 'you@example.com', :from => 'me@example.com', :subject => 'hi', :body => 'Hello there.')