2

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

4

3 回答 3

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 所做的所有相同方法进行传递。

于 2012-05-13T11:59:41.530 回答
2

啊,我想我现在更好地理解了。基本上,您正在寻找一个类似于 php 的 mail() 的简单单行代码,对吗?

如果是这样,ActionMailer 对您来说没有意义,因为它确实不是这项工作的正确工具。

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

例子:

Pony.mail(:to => 'you@example.com', :from => 'me@example.com', :subject => 'hi', :body => 'Hello there.')
于 2012-05-10T14:18:28.977 回答
2

这是最基本的解决方案。您必须将 smtp 设置和硬编码值更改为变量等。这样您就不需要使用视图。如果您仍想使用 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!!!")
于 2012-05-09T19:39:01.500 回答