Module: Ramaze::Helper::Email

Includes:
Innate::Optioned
Defined in:
lib/ramaze/helper/email.rb

Overview

The Email helper can be used as a simple way of sending Emails from your application. In order to use this helper you first need to load it:

class Comments < Ramaze::Controller
  helper :email
end

Sending an Email can be done by calling the method send_email():

send_email(
  'user@domain.tld',
  'Hello, world!',
  'Hello, this is an Email'
)

Ramaze will log any errors in case the Email could not be sent so you don't have to worry about this.

Options

This module can be configured using Innate::Optioned. Say you want to change the SMTP host you simply need to do the following:

Ramaze::Helper::Email.options.host = 'mail.google.com'

Various other options are available, for a full list of these options run the following in an IRB session:

puts Ramaze::Helper::Email.options

By default this helper uses \r\n for newlines, this can be changed as following:

Ramaze::Helper::Email.options.newline = "\n"

Author:

Since:

Instance Method Summary (collapse)

Methods included from Innate::Optioned

included, #options

Instance Method Details

- (Object) send_email(recipient, subject, message)

Sends an Email over SMTP.

Examples:

send_email('user@domain.tld', 'Hello, world!', 'Hello, this is an Email')

Parameters:

  • recipient (String)

    The Email address to send the Email to.

  • subject (String)

    The subject of the Email.

  • message (String)

    The body of the Email

Author:

  • Yorick Peterse

  • Michael Fellinger

Since:

  • 16-06-2011



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/ramaze/helper/email.rb', line 78

def send_email(recipient, subject, message)
  sender  = Email.options.sender_full || "#{Email.options.sender} <#{Email.options.sender}>"
  subject = [Email.options.subject_prefix, subject].join(' ').strip
  id      = Email.options.generator.call

  # Generate the body of the Email
  email = [
    "From: #{sender}", "To: <#{recipient}>", "Date: #{Time.now.rfc2822}",
    "Subject: #{subject}", "Message-Id: #{id}", '', message
  ].join(Email.options.newline)

  # Send the Email
  email_options = []

  [:host, :port, :helo_domain, :username, :password, :auth_type].each do |k|
    email_options.push(Email.options[k])
  end

  begin
    Net::SMTP.start(*email_options) do |smtp|
      smtp.send_message(
        email,
        Email.options.sender,
        [recipient, *Email.options.bcc]
      )

      Ramaze::Log.info(
        "Email sent to #{recipient} with subject \"#{subject}\""
      )
    end
  rescue => e
    Ramaze::Log.error(
      "Failed to send an Email to #{recipient}: #{e.inspect}"
    )
  end
end