2011-02-09 66 views
26

我正在寫一個小的Ruby程序,它將從數據庫中提取記錄並每天發送一封HTML郵件。我正在嘗試爲此使用ActionMailer 3.0.3,但我遇到了問題。到目前爲止,我在Rails之外使用ActionMailer所做的所有搜索都適用於版本3之前的版本。有人可以指出我在哪裏找到有關如何執行此操作的資源的正確方向?這裏就是我至今對我的郵件文件:ActionMailer 3 without Rails

# lib/bug_mailer.rb 
require 'action_mailer' 

ActionMailer::Base.delivery_method = :file 

class BugMailer < ActionMailer::Base 
    def daily_email 
    mail(
      :to  => "[email protected]", 
      :from => "[email protected]", 
      :subject => "testing mail" 
    ) 
    end 
end 

BugMailer.daily_email.deliver 

我肯定被困在哪裏把我的意見。每次嘗試將ActionMailer告訴我的模板失敗。

我想我也應該問一下,是否有不同的方式去完成這個程序。基本上,我在這一刻從頭開始做所有事情。顯然是什麼讓Rails真棒是它的慣例,所以試圖單獨使用部分Rails來浪費時間?有沒有辦法讓Rails-like的環境沒有創建一個完整的Rails應用程序?

回答

44

經過一番認真的調試,我發現如何配置它。

文件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  => "[email protected]", 
    :password  => "passw0rd", 
    :enable_starttls_auto => true 
    } 
ActionMailer::Base.view_paths= File.dirname(__FILE__) 

class Mailer < ActionMailer::Base 

    def daily_email 
    @var = "var" 

    mail( :to  => "[email protected]", 
      :from => "[email protected]", 
      :subject => "testing mail") do |format| 
       format.text 
       format.html 
    end 
    end 
end 

email = Mailer.daily_email 
puts email 
email.deliver 

文件·郵寄包裝/ daily_email.html.erb

<p>this is an html email</p> 
<p> and this is a variable <%= @var %> </p> 

文件·郵寄包裝/ daily_email.text.erb

this is a text email 

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

不錯的問題!它幫助我瞭解更多的是如何Rails 3件的作品:)

+0

謝謝...,幫助。所以,我卡在哪裏是我的觀點。我知道,如果我正在創建一個Rails應用程序,他們會生活在`app/views`中,但我不知道應該在哪裏放置我的視圖。現在我的觀點如下:`lib/bug_mailer/daily_email.html.erb`。有任何想法嗎? – 2011-02-11 21:59:37

2

我花了一段時間來得到這個工作的(非)的Rails 4.我懷疑這只是因爲我有「:需要=>假」所有在我的Gemfile,但我需要添加以下,使其工作:

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

如果沒有上面的代碼,我一直得到一個NoMethodError與undefined method 'assign_controller'

在那之後,我配置的ActionMailer如下:

ActionMailer::Base.smtp_settings = { 
    address: 'localhost', port: '25', authentication: :plain 
} 
ActionMailer::Base.default from: '[email protected]' 
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/<GEM_NAME>/views/mailers/<MAILER_CLASS_NAME>/<MAILER_ACTION_NAME>.erb(MAILER_ACTION_NAME是你打電話,發送電子郵件的郵件類的公共實例方法)。

最後,不要忘了把這個在您的spec_helper

ActionMailer::Base.delivery_method = :test