web-dev-qa-db-ja.com

Railsでテンプレートなしでメールを送信するにはどうすればよいですか?

私のRails 3プロジェクトでは、簡単な通知メールをいくつか送信します。テンプレートを作成したり、ロジックを実行したりする必要はありません。さまざまな場所から起動するだけです。システム内。

これを任意のRubyスクリプトで実行している場合は pony を使用します。ただし、Railsを引き続き使用したいと思います。 =メール機能と構成。これにより、システムの残りのメールと同じ信頼性と設定を得ることができます。

これを行う最も簡単な方法は何ですか?理想的には次のような方法があるでしょう

ActionMailer.send(:to => '[email protected]', :subject =>"the subject", :body =>"this is the body")
44
John Bachir

テンプレートなしでRails 3でメールを送信する最も簡単な方法は、ActionMailer::Basemailメソッドを呼び出し、その後に直接deliverメソッドを呼び出すことです。

例として、以下はプレーンテキストの電子メールを送信します。

ActionMailer::Base.mail(
  from: "[email protected]",
  to: "[email protected]",
  subject: "test",
  body: "test"
).deliver

http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail は、すべてのヘッダーオプションと、マルチパート/代替メールを送信する方法に関するアイデアを提供しますtext/plainおよびtext/htmlパーツを直接。

104
KMG

ここ は、Railsからの小さな例です。renderメソッドを使用するガイドです。私は試していませんが、cotrollersでrenderとして機能する場合は、次のように使用できます。

_render :text => "Your message"
_

または

_render :text => my_message
_

ここで、_my_message_はパラメーターです。

あなたはあなたが望むあらゆる場所から呼び出すことができるメソッドでそれをラップすることができます。

更新Rails 3.2.8

このバージョンのRailsでは、次のように実行する必要がありました。

_def raw_email( email, subject, body )
  mail(
    :to => email,
    :subject => subject
  ) do |format|
    format.text { render :text => body }
  end
end
_
9
klew

Rails 5ユーザーは、(_format.text {...}_を使用して)受け入れられた回答が機能しないことに気付く場合があります。 Railsがビューを探していたため、少なくとも例外が発生していました。

Railsガイドと呼ばれるガイド テンプレートのレンダリングなしでメールを送信する にセクションがあることがわかりました。必要なのは、mail()。例:

_class UserMailer < ApplicationMailer
  def welcome_email
    mail(to: params[:user].email,
         body: params[:email_body],
         content_type: "text/html",
         subject: "Already rendered!")
  end
end
_
8
arooaroo

あなたはこのようなことを試すことができます:

class Notifier < ActionMailer::Base
  def send_simple_message(options)
    mail(options.except(:body)) do |format|
      format.text { render :text => options[:body] }
    end.deliver
  end
end
7
John Douthat