# In environment.rb or in config/environments/*. Defaults to :smtp
config.action_mailer.delivery_method = :test|:smtp|:sendmail
# Authentication is one of :plain, :login, and :cram_md5
ActionMailer::Base.smtp_settings = {
:address => "mail.messagingengine.com",
:port => 25,
:domain => "mail.messagingengine.com",
:authentication => :login,
:user_name => "peter_marklund@fastmail.fm",
:password => "..."
}
config.action_mailer.perform_deliveries = true | false
config.action_mailer.default_charset = "iso-8859-1"
# Creates app/models/statistics_mailer.rb script/generate mailer StatisticsMailer
class StatisticsMailer < ActionMailer::Base
def monthly(user, stats, sent_on = Time.now)
subject "Monthly statistics"
body {:user => user, :stats => stats}
recipients user.email
from 'admin@somecompany.com'
sent_on sent_on
headers {}
bcc 'peter_marklund@fastmail.fm'
content_type "text/html"
end
end
# In app/views/statistics_mailer/monthly.rhtml
Dear <%= @user.name %>,
here is the statistics for <%= 1.month.ago.strftime("%B") %>.
<%- for service in @user.customer.services -%>
*** Service <%= service.name %>
Number of calls: <%= @stats[service.id]['n_calls'] %>
...
<%- end -%>
Regards
Peter Marklund
# As of Rails 2.2 you can use layouts for your mailers just as you would for # controllers, so for the StatisticsMailer we can put our layout in: app/views/layouts/statistics_mailer.html.erb
StatisticsMailer.deliver_monthly(user, stats)
# Alternatively, you can do:
email = StatisticsMailer.create_monthly(user, stats) #=> TMail::Mail object
# Set any properties on the email here
email.set_content_type("text/html")
StatisticsMailer.deliver(email)
# Approach 1: One template per content type: monthly.text.plain.erb, monthly.text.html.erb etc.
# Approach 2: Using the part method:
def signup_notification(recipient)
# recipients, subject, from etc. here...
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
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
class BulkReceiver < ActionMailer::Base
def receive(email)
# Process received email here
end
end
# Configure your mail server to pipe incoming email to the program
/path/to/app/script/runner 'BulkReceiver.receive(STDIN.read)'
user = users(:peter) email = UserMailer.create_signup_notification(user) assert_match /you have been signed up/i, email.subject assert email.body.include?(my_account_url(user)) assert_equal user.email, email.to assert_equal "admin@mysite.com", email.from