2012-04-30 9 views
2

私は電子メールの送信に使用されるアプリケーションを作成しています。メールを生成するために使用されるデータを受信するだけなので、通常のメーラーとテンプレートを使用する必要はありません。しかし、SMTPと直接対話するのではなく、ActionMailerを使用するといくつかの利点があると私は推測します。 ActionMailer::Baseの新しいインスタンスをインスタンス化しようとしているときに問題が発生しました。 ActionMailer::Baseを拡張する新しいクラスを定義することなく、ActionMailerを単独で使用するにはどうすればよいですか?Rails:ActionMailerを単独で使用するには?

+0

質問はちょっと混乱します。電子メールを送信するためのRESTful APIを作成しているとします。 RESTful APIを扱っているレールアプリもメールの送信を担当していますか? – patrickmcgraw

+0

あなたは正しいです、申し訳ありません。私は質問を更新し、本当の質問とは関係がないため、RESTに関する部分を取り出しました。 – Andrew

+0

なぜActionMailer :: Baseを拡張したくないのですか?それが働くことが意図されている方法です。 – tybro0103

答えて

7

私はあなたのための勝者はポニーと呼ばれるルビーの宝石だと思います。これにより、メールを非常に簡単に送信できます。

Mail.deliver do 
    from  '[email protected]' 
    to  '[email protected]' 
    subject 'Here is the image you wanted' 
    body  File.read('body.txt') 
    add_file :filename => 'somefile.png', :content => File.read('/somefile.png') 
end 

これは、ActionMailerと同じ方法で配信できます。

+0

mail gemを使用して、メール本文にプレースホルダを使用できますか? – mohit

+0

おそらく、これをRailsのないRubyスクリプトで使うことはできますか? – Donato

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 => "[email protected]" 

    # def somemethod() 
    # mail(:to => "John Doe <[email protected]>", :subject => "TEST", :body => "HERE WE GO!!!") 
    # end 

    def mail(args) 
    super 
    end 
end 

# TestMailer.somemethod().deliver 
TestMailer.mail(:to => "John Doe <[email protected]>", :subject => "TEST", :body => "HERE WE GO!!!") 
+0

これは私がすでにやっていることのタイプです。私は一般的な "準備"メソッドを持つ一般的なメーラーを持っています。私はそれを使用しているので、直接 'mail()'を呼び出すようなことをしたいと思います。 – Andrew

+0

私のコードをより一般的なものに変更しました。これはあなたが望むものですが、あなたがそれを提案した方法ではありません。私はそれが少しオーバーヘッドがあることを知っていますが、それはあなたの仕様に従います。あなたは全てをオーバーライドすることができ、ビューはありません。デフォルトのfromはあなた自身をmail()に追加できるので、無関係です。 – ayckoster

2

ああでそれを呼び出す、私はより良い今理解だと思います。基本的には、phpのmail()に似た簡単なone-linerを探していますよね?

もしそうなら、ActionMailerは本当にこの仕事のための適切なツールではないのであなたに意味をなさない。 https://github.com/benprew/pony

例:actionmailerのための基本となる機能はmail gemによって提供され

Pony.mail(:to => '[email protected]', :from => '[email protected]', :subject => 'hi', :body => 'Hello there.') 
+0

私は、Railsの外でActionMailerが冗長で使いにくいと感じています。私はRuby(ただしRailsではない)プロジェクトの外部にPonyを使用しています。 – dimitarvp

関連する問題