- 1.0.0 (0)
- 1.1.6 (38)
- 1.2.6 (13)
- 2.0.3 (0)
- 2.1.0 (21)
- 2.2.1 (0)
- 2.3.8 (3)
- 3.0.0 (35)
- 3.0.9 (-4)
- 3.1.0 (6)
- 3.2.1 (-10)
- 3.2.8 (0)
- 3.2.13 (0)
- 4.0.2 (18)
- 4.1.8 (18)
- 4.2.1 (8)
- 4.2.7 (0)
- 4.2.9 (0)
- 5.0.0.1 (2)
- 5.1.7 (9)
- 5.2.3 (0)
- 6.0.0 (0)
- 6.1.3.1 (0)
- 6.1.7.7 (0)
- 7.0.0 (3)
- 7.1.3.2 (14)
- 7.1.3.4 (0)
- What's this?
Usage:
class ApplicationMailer < ActionMailer::Base # Set up properties # Properties can also be specified via accessor methods # (i.e. self.subject = "foo") and instance variables (@subject = "foo"). def signup_notification(recipient) recipients recipient.email_address_with_name subject "New account information" body { "account" => recipient } from "system@example.com" end # explicitly specify multipart messages def signup_notification(recipient) recipients recipient.email_address_with_name subject "New account information" from "system@example.com" part :content_type => "text/html", :body => render_message("signup-as-html", :account => recipient) part "text/plain" do |p| p.body = render_message("signup-as-plain", :account => recipient) p.transfer_encoding = "base64" end end # attachments def signup_notification(recipient) recipients recipient.email_address_with_name subject "New account information" from "system@example.com" attachment :content_type => "image/jpeg", :body => File.read("an-image.jpg") attachment "application/pdf" do |a| a.body = generate_your_pdf_here() end end # implicitly multipart messages def signup_notification(recipient) recipients recipient.email_address_with_name subject "New account information" from "system@example.com" body(:account => "recipient") # ActionMailer will automatically detect and use multipart templates, # where each template is named after the name of the action, followed # by the content type. Each such detected template will be added as # a separate part to the message. # # for example, if the following templates existed: # * signup_notification.text.plain.rhtml # * signup_notification.text.html.rhtml # * signup_notification.text.xml.rxml # * signup_notification.text.x-yaml.rhtml # # Each would be rendered and added as a separate part to the message, # with the corresponding content type. The same body hash is passed to # each template. end end # After this, post_notification will look for "templates/application_mailer/post_notification.rhtml" ApplicationMailer.template_root = "templates" ApplicationMailer.create_comment_notification(david, hello_world) # => a tmail object ApplicationMailer.deliver_comment_notification(david, hello_world) # sends the email
Configuration options
These options are specified on the class level, like ActionMailer::Base.template_root = "/my/templates"
- template_root - template root determines the base from which template references will be made.
- logger - the logger is used for generating information on the mailing run if available. Can be set to nil for no logging. Compatible with both Ruby’s own Logger and Log4r loggers.
- server_settings
- Allows detailed configuration of the server:
- :address Allows you to use a remote mail server. Just change it from its default "localhost" setting.
- :port On the off chance that your mail server doesn’t run on port 25, you can change it.
- :domain If you need to specify a HELO domain, you can do it here.
- :user_name If your mail server requires authentication, set the username in this setting.
- :password If your mail server requires authentication, set the password in this setting.
- :authentication If your mail server requires authentication, you need to specify the authentication type here. This is a symbol and one of :plain, :login, :cram_md5
- raise_delivery_errors - whether or not errors should be raised if the email fails to be delivered.
- delivery_method - Defines a delivery method. Possible values are :smtp (default), :sendmail, and :test. Sendmail is assumed to be present at "/usr/sbin/sendmail".
- perform_deliveries - Determines whether deliver_* methods are actually carried out. By default they are, but this can be turned off to help functional testing.
- deliveries - Keeps an array of all the emails sent out through the Action Mailer with delivery_method :test. Most useful for unit and functional testing.
- default_charset - The default charset used for the body and to encode the subject. Defaults to UTF-8. You can also pick a different charset from inside a method with @charset.
- default_content_type - The default content type used for the main part of the message. Defaults to "text/plain". You can also pick a different content type from inside a method with @content_type.
- default_mime_version - The default mime version used for the message. Defaults to nil. You can also pick a different value from inside a method with @mime_version. When multipart messages are in use, @mime_version will be set to "1.0" if it is not set inside a method.
- default_implicit_parts_order - When a message is built implicitly (i.e. multiple parts are assembled from templates which specify the content type in their filenames) this variable controls how the parts are ordered. Defaults to ["text/html", "text/enriched", "text/plain"]. Items that appear first in the array have higher priority in the mail client and appear last in the mime encoded message. You can also pick a different order from inside a method with @implicit_parts_order.

render template file different from your action (method) name
In some cases you have to avoid rails magic that uses template names named as your ActionMailer method.
rails magic
def daily_notification # ... end # will look for daily_notification.erb def weekly_notification # ... end # will look for weekly_notification.erb
your case
Just give necessary value to @template instance variable.
def setup # ... @template = 'notification' end def daily_notification # ... end # will look for notification.erb def weekly_notification # ... end # will look for notification.erb

Use helpers in your ActionMailer views
It’s very easy to give your mailer access to helpers:
# Let your mailer user the ApplicationHelper methods class MyMailer < ActionMailer::Base helper :application end

Using gmail SMTP server to send mail
First you would need to sign up with Google Apps, which is a very painless process:
http://www.google.com/a/cpanel/domain/new
Next you need to install a plugin that will allow ActionMailer to make a secure connection to google:
script/plugin install git://github.com/caritos/action_mailer_tls.git
We need this due to transport layer security used by google.
Lastly all you need to do is place this in your environment.rb file and modify it to your settings:
ActionMailer::Base.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :domain => "your.domain_at_google.com", :authentication => :plain, :user_name => "google_username", :password => "password" }

Using gmail SMTP server to send mail
If you’re running Rails >= 2.2.1 [RC2] and Ruby 1.8.7, you don’t need plugin below. Ruby 1.8.7 supports SMTP TLS and Rails 2.2.1 ships with an option to enable it if you’re running Ruby 1.8.7.
All You need to do is:
ActionMailer::Base.smtp_settings = { :enable_starttls_auto => true }

james' note incorrect
The render method in ActionMailer is infact a private method, in all versions (including the new Rails 2.2).
However, spectators note about @template works well. Thanks.

Content type for emails with attachments
Be aware that if you want to send emails with attachments, you probably want to use the content type multipart/mixed for the overall email.
The MIME time multipart/alternative is intended for emails where each part is a different representation of the same message.
After following the 2.3.2 documentation we used multipart/alternative to attach files to our mails, however this then caused Hotmail to ignore the attachments. It turns out it thought they were all alternative versions of the HTML content (which it could already display, so the alternatives weren’t necessary)

render template file different from your action (method) name - alternative
Alternative ways to render templates for actions
# Renders the template for foo (foo.html.erb, foo.haml.erb, foo.text.html.haml, whatever :P) def foo end # Renders the template that would be rendered in foo # (but without the foo controller action being invoked) def bar render :action => 'foo' end # Similar to what bar does, but render's a specifically named template def roar render :template => 'foo' end # Similar to what roar does, but render's a template # from outside of the current controller's views directory def boo render :template => 'global/something' end

smtp syntax error 555 5.5.2
If You’re seeing a Net::SMTPFatalError (555 5.5.2 Syntax error ...) than You should check the email’s from header ! You probably have brackets while calling the from attribute setter :
Works in Rails < 2.3.3
def signup_notification(recipient) recipients recipient.email_address_with_name subject "New account information" from %("My App" <no-reply@myapp.com>) end
Works in Rails 2.3.5
def signup_notification(recipient) recipients recipient.email_address_with_name subject "New account information" from 'no-reply@myapp.com' # no <> brackets ! end
in Rails 2.3.3 the from email address will get wrapped with angle brackets, thus it must not have them within the address.

re: james' note incorrect
kieran is correct, my note is incorrect, it was not meant for ActionMailer::Base

Specify attachment names
If you want to give your attachment a name, you can do this:
attachment :filename => 'my_file.txt', :body => File.read('/var/null')
It will appear to the recipient as a file named “my_file.txt” rather than something awful like “noname 1”.

Using Amazon Simple Email Service with ActionMailer
First of all, get all the necessary SES credentials and verify your email address.
Then, just edit your config/environments/*.rb files:
config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: 'email-smtp.us-east-1.amazonaws.com', user_name: 'your-ses-smtp-user-name', password: 'your-ses-smtp-password', authentication: :login, enable_starttls_auto: true }
And that’s it!