Update Action Mailer Basics [skip ci]
This commit is contained in:
parent
38b3af738a
commit
50bc497a9f
@ -92,8 +92,8 @@ registered email address:
|
||||
class UserMailer < ApplicationMailer
|
||||
default from: 'notifications@example.com'
|
||||
|
||||
def welcome_email(user)
|
||||
@user = user
|
||||
def welcome_email
|
||||
@user = params[:user]
|
||||
@url = 'http://example.com/login'
|
||||
mail(to: @user.email, subject: 'Welcome to My Awesome Site')
|
||||
end
|
||||
@ -191,7 +191,7 @@ class UsersController < ApplicationController
|
||||
respond_to do |format|
|
||||
if @user.save
|
||||
# Tell the UserMailer to send a welcome email after save
|
||||
UserMailer.welcome_email(@user).deliver_later
|
||||
UserMailer.welcome_email.with(user: @user).deliver_later
|
||||
|
||||
format.html { redirect_to(@user, notice: 'User was successfully created.') }
|
||||
format.json { render json: @user, status: :created, location: @user }
|
||||
@ -220,7 +220,7 @@ If you want to send emails right away (from a cronjob for example) just call
|
||||
class SendWeeklySummary
|
||||
def run
|
||||
User.find_each do |user|
|
||||
UserMailer.weekly_summary(user).deliver_now
|
||||
UserMailer.with(user: user).weekly_summary.deliver_now
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -331,7 +331,7 @@ with the addresses separated by commas.
|
||||
|
||||
```ruby
|
||||
class AdminMailer < ApplicationMailer
|
||||
default to: Proc.new { Admin.pluck(:email) },
|
||||
default to: -> { Admin.pluck(:email) },
|
||||
from: 'notification@example.com'
|
||||
|
||||
def new_registration(user)
|
||||
@ -351,8 +351,8 @@ address when they receive the email. The trick to doing that is to format the
|
||||
email address in the format `"Full Name" <email>`.
|
||||
|
||||
```ruby
|
||||
def welcome_email(user)
|
||||
@user = user
|
||||
def welcome_email
|
||||
@user = params[:user]
|
||||
email_with_name = %("#{@user.name}" <#{@user.email}>)
|
||||
mail(to: email_with_name, subject: 'Welcome to My Awesome Site')
|
||||
end
|
||||
@ -372,8 +372,8 @@ To change the default mailer view for your action you do something like:
|
||||
class UserMailer < ApplicationMailer
|
||||
default from: 'notifications@example.com'
|
||||
|
||||
def welcome_email(user)
|
||||
@user = user
|
||||
def welcome_email
|
||||
@user = params[:user]
|
||||
@url = 'http://example.com/login'
|
||||
mail(to: @user.email,
|
||||
subject: 'Welcome to My Awesome Site',
|
||||
@ -394,8 +394,8 @@ templates or even render inline or text without using a template file:
|
||||
class UserMailer < ApplicationMailer
|
||||
default from: 'notifications@example.com'
|
||||
|
||||
def welcome_email(user)
|
||||
@user = user
|
||||
def welcome_email
|
||||
@user = params[:user]
|
||||
@url = 'http://example.com/login'
|
||||
mail(to: @user.email,
|
||||
subject: 'Welcome to My Awesome Site') do |format|
|
||||
@ -453,8 +453,8 @@ the format block to specify different layouts for different formats:
|
||||
|
||||
```ruby
|
||||
class UserMailer < ApplicationMailer
|
||||
def welcome_email(user)
|
||||
mail(to: user.email) do |format|
|
||||
def welcome_email
|
||||
mail(to: params[:user].email) do |format|
|
||||
format.html { render layout: 'my_layout' }
|
||||
format.text
|
||||
end
|
||||
@ -477,7 +477,7 @@ special URL that renders them. In the above example, the preview class for
|
||||
```ruby
|
||||
class UserMailerPreview < ActionMailer::Preview
|
||||
def welcome_email
|
||||
UserMailer.welcome_email(User.first)
|
||||
UserMailer.welcome_email.with(user: User.first)
|
||||
end
|
||||
end
|
||||
```
|
||||
@ -594,12 +594,12 @@ mailer action.
|
||||
|
||||
```ruby
|
||||
class UserMailer < ApplicationMailer
|
||||
def welcome_email(user, company)
|
||||
@user = user
|
||||
def welcome_email
|
||||
@user = params[:user]
|
||||
@url = user_url(@user)
|
||||
delivery_options = { user_name: company.smtp_user,
|
||||
password: company.smtp_password,
|
||||
address: company.smtp_host }
|
||||
delivery_options = { user_name: params[:company].smtp_user,
|
||||
password: params[:company].smtp_password,
|
||||
address: params[:company].smtp_host }
|
||||
mail(to: @user.email,
|
||||
subject: "Please see the Terms and Conditions attached",
|
||||
delivery_method_options: delivery_options)
|
||||
@ -616,9 +616,9 @@ will default to `text/plain` otherwise.
|
||||
|
||||
```ruby
|
||||
class UserMailer < ApplicationMailer
|
||||
def welcome_email(user, email_body)
|
||||
mail(to: user.email,
|
||||
body: email_body,
|
||||
def welcome_email
|
||||
mail(to: params[:user].email,
|
||||
body: params[:email_body],
|
||||
content_type: "text/html",
|
||||
subject: "Already rendered!")
|
||||
end
|
||||
@ -677,24 +677,43 @@ Action Mailer allows for you to specify a `before_action`, `after_action` and
|
||||
* You could use a `before_action` to populate the mail object with defaults,
|
||||
delivery_method_options or insert default headers and attachments.
|
||||
|
||||
```ruby
|
||||
class InvitationsMailer < ApplicationMailer
|
||||
before_action { @inviter, @invitee = params[:inviter], params[:invitee] }
|
||||
before_action { @account = params[:inviter].account }
|
||||
|
||||
default to: -> { @invitee.email_address },
|
||||
from: -> { common_address(@inviter) },
|
||||
reply_to: -> { @inviter.email_address_with_name }
|
||||
|
||||
def account_invitation
|
||||
mail subject: "#{@inviter.name} invited you to their Basecamp (#{@account.name})"
|
||||
end
|
||||
|
||||
def project_invitation
|
||||
@project = params[:project]
|
||||
@summarizer = ProjectInvitationSummarizer.new(@project.bucket)
|
||||
|
||||
mail subject: "#{@inviter.name.familiar} added you to a project in Basecamp (#{@account.name})"
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
* You could use an `after_action` to do similar setup as a `before_action` but
|
||||
using instance variables set in your mailer action.
|
||||
|
||||
```ruby
|
||||
class UserMailer < ApplicationMailer
|
||||
before_action { @business, @user = params[:business], params[:user] }
|
||||
|
||||
after_action :set_delivery_options,
|
||||
:prevent_delivery_to_guests,
|
||||
:set_business_headers
|
||||
|
||||
def feedback_message(business, user)
|
||||
@business = business
|
||||
@user = user
|
||||
mail
|
||||
def feedback_message
|
||||
end
|
||||
|
||||
def campaign_message(business, user)
|
||||
@business = business
|
||||
@user = user
|
||||
def campaign_message
|
||||
end
|
||||
|
||||
private
|
||||
|
Loading…
Reference in New Issue
Block a user