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