Skip to content

Instantly share code, notes, and snippets.

@psahni
Forked from wrburgess/gist:3767468
Created July 7, 2014 10:46
Show Gist options
  • Save psahni/f784d68e14fdd48b727b to your computer and use it in GitHub Desktop.
Save psahni/f784d68e14fdd48b727b to your computer and use it in GitHub Desktop.

##Refs

Generate a Mailer Model and View

In terminal:

rails g mailer UserMailer

or create a mailers/user_mailer.rb

class UserMailer < ActionMailer::Base
  layout 'mailer_default'

  def user_email(user)
    @user = user
    @url = "http://example.com/login"
    mail(
      charset:       "utf-8",
      content_type:  "text/html",
      from:          Settings.mailer.from,
      subject:       "Email Test",
      to:            user.email
    )
  end
end

Create Mailer Templates

create a layout for emails as views/layouts/mailer_default.html.haml

!!!
%html{ lang: "en" }
  %head
  %body
    #wrapper
      =yield

create a partial for the email header at views/shared/_mailer_header_default.html.haml

#header{ style: "color: blue;" }
  %p
    This is header content

create a partial for the email footer at views/shared/_mailer_footer_default.html.haml

#footer{ style: "color: red;" }
  %p
    This is footer content

create a view for emails as views/user_mailer/user_email.html.haml

= render :partial => "shared/mailer_header_default"
  #content{ style: "color: green;" }
    %p 
      This is the content of the User Email
= render :partial => "shared/mailer_footer_default"

Create Settings for Mailer

Add to file config/settings.yml

mailer:
  from: "FirstName LastName <[email protected]>"
  address: "smtp.gmail.com"
  port: 587
  domain: "gmail.com"
  user_name: <%= ENV["MAILER_USERNAME"] %>
  password: <%= ENV["MAILER_PASSWORD"] %>
  authentication: "plain"
  enable_starttls_auto: true

Initialize Mailer Settings

create a file name config/intializers/mailer_settings.rb

ActionMailer::Base.smtp_settings = {  
  address:              Settings.mailer.address,  
  port:                 Settings.mailer.port,  
  domain:               Settings.mailer.domain,  
  user_name:            Settings.mailer.user_name,  
  password:             Settings.mailer.password,  
  authentication:       Settings.mailer.authentication,  
  enable_starttls_auto: Settings.mailer.enable_starttls_auto  
}

Set Up Environment Variables

On heroku:

$ heroku config:add MAILER_USERNAME=gmail.com --remote stage
$ heroku config:add MAILER_PASSWORD=password --remote stage

On local:

$ export MAILER_USERNAME=gmail.com --remote stage
$ export MAILER_PASSWORD=password --remote stage

Send an Email

Fire off an email using this line of ruby:

UserMailer.user_email(@user).deliver
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment