How can I send mail with rails without a template? How can I send mail with rails without a template? ruby ruby

How can I send mail with rails without a template?


The simplest way to send mail in rails 3 without a template is to call the mail method of ActionMailer::Base directly followed by the deliver method,

For ex, the following would send a plain text e-mail:

ActionMailer::Base.mail(  from: "me@example.com",  to: "you@example.com",  subject: "test",  body: "test").deliver

http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail gives you all the header options and also ideas about the how to send a multipart/alternative email with text/plain and text/html parts directly.


Rails 5 users may find the accepted answer (using format.text {...}) doesn't work; at least I was getting an exception because Rails was looking for a view.

Turns out there's a section in the Rails Guide called Sending Emails without Template Renderingand all one needs to do is supply :content_type and :body options to mail(). E.g.:

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


Here is little example from Rails Guides which uses render method. I didn't try it, but if it works as render in cotrollers, then you can just use:

render :text => "Your message"

or

render :text => my_message

Where my_message is a parameter.

You can just wrap it in a method which you can call from every place you want.

Updated Rails 3.2.8

In this version of Rails I had to do it like this:

def raw_email( email, subject, body )  mail(    :to => email,    :subject => subject  ) do |format|    format.text { render :text => body }  endend