2011-02-09 11 views
26

私は、データベースからレコードを引き出し、毎日HTML電子メールを送信する小さなRubyプログラムを作成しています。私はこれのためにActionMailer 3.0.3を使用しようとしていますが、私は問題に取り組んでいます。 ActionMailerをRailsの外で使用してこれまでに行ったすべての検索は、バージョン3より前のバージョンに適用されます。誰かがこれを行う方法についてのリソースを見つける場所の正しい方向を教えてくれますか?私の郵便受けファイルに今どこにいるのですか:ActionMailer 3 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 %> 

良い質問!それは、私がRails 3がどのように動作するかをもっと理解する助けになりました:)

+0

ありがとう...:

最後には、あなたのspec_helperでこれを置くことを忘れないでください。だから、私が次についている場所は、私の意見をどこに置くかです。私が知っていることは、もし私がRailsアプリケーションを作っていたら、彼らは 'app/views'に住んでいただろうが、どこに私の見解を置くべきか分からない。今の私の見解は 'lib/bug_mailer/daily_email.html.erb'です。何か案は? –

+0

ハ、すべての答えを持っています:http://stackoverflow.com/questions/741989/actionmailer-and-ramaze – Augusto

+0

それは実際には私がRailsの外でActionMailerを研究して見て非常に最初の投稿でした。私はそこに記載された方法に従ったが、行っていない。ここに私はすべての設定を現在持っている方法です。メーラーは 'bugs_email/lib/bug_mailer.rb'です。ビューは 'bugs_email/lib/bug_mailer/daily_email.html.erb'です。だから私は何かが欠けていない限り(可能です!)私はその例のように設定されています。 –

2

これは、(非)Rails 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は、あなたが電子メールを送信するために呼び出すあなたのメーラークラスのパブリックインスタンスメソッドである)lib/<GEM_NAME>/views/mailers/<MAILER_CLASS_NAME>/<MAILER_ACTION_NAME>.erbに行く:次のように

その後、私はactionmailerのを構成しました。助け

ActionMailer::Base.delivery_method = :test 
関連する問題