没有Rails的ActionMailer 3

我正在编写一个小型Ruby程序,它将从数据库中提取记录并每天发送一封HTML电子邮件。 我正在尝试使用ActionMailer 3.0.3,但我遇到了问题。 到目前为止,我在Rails之外使用ActionMailer所做的所有搜索都适用于版本3之前的版本。有人能指出我在哪里找到如何执行此操作的资源的正确方向吗? 这是我到目前为止在我的邮件文件中的位置:

# lib/bug_mailer.rb require 'action_mailer' ActionMailer::Base.delivery_method = :file class BugMailer  "example@mail.com", :from => "example@mail.com", :subject => "testing mail" ) end end BugMailer.daily_email.deliver 

我肯定会被困在哪里发表意见。 我告诉ActionMailer我的模板所在的每一次尝试都失败了。

我想我也应该问一下完成这个程序是否有不同的方法。 基本上,我现在正在从头开始做所有事情。 显然是什么让Rails很棒是它的常规,所以试图自己使用部分Rails浪费时间? 有没有办法在不创建完整的Rails应用程序的情况下获得类似Rails的环境?

经过一些严肃的调试,我找到了如何配置它。

file mailer.rb

 require 'action_mailer' ActionMailer::Base.raise_delivery_errors = true ActionMailer::Base.delivery_method = :smtp ActionMailer::Base.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :domain => "domain.com.ar", :authentication => :plain, :user_name => "test@domain.com.ar", :password => "passw0rd", :enable_starttls_auto => true } ActionMailer::Base.view_paths= File.dirname(__FILE__) class Mailer < ActionMailer::Base def daily_email @var = "var" mail( :to => "myemail@gmail.com", :from => "test@domain.com.ar", :subject => "testing mail") do |format| format.text format.html end end end email = Mailer.daily_email puts email email.deliver 

file mailer / daily_email.html.erb

 

this is an html email

and this is a variable <%= @var %>

file mailer / daily_email.text.erb

 this is a text email and this is a variable <%= @var %> 

好问题! 它帮助我更多地了解Rails 3的工作方式:)

我需要一段时间才能在(非)Rails 4中使用它。我怀疑这只是因为我的Gemfile中有’:require => false’,但是我需要添加以下内容才能使它工作:

 require 'action_view/record_identifier' require 'action_view/helpers' require 'action_mailer' 

如果没有上面的代码,我会使用undefined method 'assign_controller'继续获取undefined method 'assign_controller'

之后,我按如下方式配置了ActionMailer:

 ActionMailer::Base.smtp_settings = { address: 'localhost', port: '25', authentication: :plain } ActionMailer::Base.default from: 'noreply@example.com' ActionMailer::Base.raise_delivery_errors = true ActionMailer::Base.logger = Logger.new(STDOUT) ActionMailer::Base.logger.level = Logger::DEBUG ActionMailer::Base.view_paths = [ File.join(File.expand_path("../../", __FILE__), 'views', 'mailers') # Note that this is an Array ] 

模板进入lib//views/mailers//.erb (MAILER_ACTION_NAME是您调用以发送电子邮件的邮件程序类的公共实例方法)。

最后,不要忘记将它放在spec_helper

 ActionMailer::Base.delivery_method = :test