2011-02-09 3 views
26

나는 데이터베이스에서 레코드를 가져오고 매일 HTML 전자 메일을 보내는 작은 루비 프로그램을 작성하고 있습니다. 나는 이것을 위해 ActionMailer 3.0.3을 사용하려고 시도하고있다. 그러나 나는 이슈를 다루고있다. 지금까지 레일스 밖에서 ActionMailer를 사용하여 수행 한 모든 검색은 버전 3 이전의 버전에도 적용됩니다. 누군가이 작업을 수행하는 방법에 대한 리소스를 찾을 수있는 올바른 방향으로 나를 안내 할 수 있습니까? 여기 내 메일러 파일의 위치는 다음과 같습니다.ActionMailer 3 with 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 애플리케이션을 만들지 않고도 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 %> 
,

좋은 질문입니다! 레일스 3의 작동 방식에 대해 좀 더 이해할 수있었습니다.

+0

감사합니다 ... 도움이. 그래서, 다음에 붙어있는 곳은 내 견해를 어디에 둘 것인지입니다. Rails 앱을 만들면 앱/뷰에 살지만 내 견해를 어디에 두어야할지 모르겠다. 지금 내 견해는'lib/bug_mailer/daily_email.html.erb'입니다. 어떤 아이디어? –

+0

하, stackoverflow 모든 해답이있다 :) http://stackoverflow.com/questions/741989/actionmailer-and-ramaze – Augusto

+0

사실 내가 레일 밖에서 ActionMailer를 연구에서 보았던 첫 번째 게시물이었다. 나는 거기에 언급 된 방법을 따라 갔지만, 아무 것도하지 않았다. 내가 어떻게 모든 것을 현재 설정했는지 알아 보자. 메일러는'bugs_email/lib/bug_mailer.rb'입니다. 뷰는'bugs_email/lib/bug_mailer/daily_email.html.erb'입니다. 그래서 내가 뭔가를 놓치지 않으면 (가능합니다!) 나는 그 예와 같이 설정되어있다. –

2

레일리스 4에서 작동하려면 시간이 좀 걸렸습니다. ': require => false' 내 모든 Gemfile을 통해,하지만 난 그것이 작동되도록하려면 다음을 추가 할 필요 : 위의 코드없이

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

, 나는 undefined method 'assign_controller'와 NoMethodError을 받고 있었다.

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 
] 

템플릿은 (MAILER_ACTION_NAME 당신이 이메일을 보내도록 전화하여 메일러 클래스의 public 인스턴스 방법) lib/<GEM_NAME>/views/mailers/<MAILER_CLASS_NAME>/<MAILER_ACTION_NAME>.erb에 가서 다음과 같이

그 후, 나는 ActionMailer을 구성.

마지막으로, 당신의 spec_helper에 넣고하는 것을 잊지 마세요 :

ActionMailer::Base.delivery_method = :test