Introduction
Mailers help your app send emails automatically. Templates let you design what those emails look like.
Mailers help your app send emails automatically. Templates let you design what those emails look like.
rails generate mailer MailerName method_name
# Example:
rails generate mailer UserMailer welcome_emailclass UserMailer < ApplicationMailer def welcome_email(user) @user = user mail(to: @user.email, subject: 'Welcome!') end end
# Template: app/views/user_mailer/welcome_email.html.erb <h1>Hello, <%= @user.name %>!</h1> <p>Thanks for joining us.</p>
# Template: app/views/user_mailer/welcome_email.text.erb Hello, <%= @user.name %>! Thanks for joining us.
This example shows a mailer sending a welcome email to a user named Alice. It prints the recipient, subject, and email body.
class UserMailer < ApplicationMailer def welcome_email(user) @user = user mail(to: @user.email, subject: 'Welcome to Our App') end end # Template: app/views/user_mailer/welcome_email.html.erb # <h1>Welcome, <%= @user.name %>!</h1> # <p>We are happy you joined.</p> # Usage in controller or console: user = OpenStruct.new(name: 'Alice', email: 'alice@example.com') email = UserMailer.welcome_email(user) puts email.to puts email.subject puts email.body.encoded
Always create both HTML and plain text templates for better email compatibility.
Use instance variables (like @user) to pass data to templates.
Test emails in development using tools like Letter Opener or Mailcatcher.
Mailers send emails from your Rails app.
Templates define how emails look in HTML and text.
Generate mailers with Rails commands and customize methods and views.
UserMailer?rails generate mailer UserMailer creates a mailer class and related files.class UserMailer < ApplicationMailer
def welcome_email(user)
@user = user
mail(to: @user.email, subject: 'Welcome!')
end
endUserMailer.welcome_email(@user).deliver_now is called?welcome_email sets instance variables and calls mail to prepare the email.deliver_nowdeliver_now sends the email immediately instead of queuing it.welcome_email.html.erb:<h1>Welcome, <%= @user.name %>!</h1> <p>Thanks for joining.</p> <p>Your email is: <%= user.email %></p>
@user, so the template must use @user to access user data.user.email which is undefined, causing an error..html.erb and .text.erb extensions.Pass the test and this pattern moves unknown