class Mail::SMTP
mail.deliver!
end
body ‘testing sendmail’
subject ‘testing sendmail’
from ‘ada@test.lindsaar.net’
to ‘mikel@test.lindsaar.net’
mail = Mail.new do
Or by calling deliver on a Mail message
end
body ‘testing sendmail’
subject ‘testing sendmail’
from ‘ada@test.lindsaar.net’
to ‘mikel@test.lindsaar.net’
Mail.deliver do
Once you have the settings right, sending the email is done by:
=== Delivering the email
Feel free to send me other examples that were tricky
=== Others
or a string containing the name of an OpenSSL verify mode (none, peer).
verify mode constant (OpenSSL::SSL::VERIFY_NONE, OpenSSL::SSL::VERIFY_PEER),
an :openssl_verify_mode setting. Its value may be either an OpenSSL
that isn’t possible, you can control this behavior with
hostname or update the certificate authorities trusted by your ruby. If
OpenSSL will reject these by default. The best remedy is to use the correct
or whose names do not exactly match the hostname given in the address.
When using TLS, some mail servers provide certificates that are self-signed
=== Certificate verification
end
:enable_starttls_auto => true }
:authentication => ‘plain’,
:password => ‘<password>’,
:user_name => ‘<username>’,
:domain => ‘your.host.name’,
:port => 587,
delivery_method :smtp, { :address => “smtp.gmail.com”,
Mail.defaults do
=== Sending via GMail
end
:enable_starttls_auto => true }
:authentication => ‘plain’,
:password => ‘<password>’,
:user_name => ‘<username>’,
:domain => ‘your.host.name’,
:port => 587,
delivery_method :smtp, { :address => “smtp.me.com”,
Mail.defaults do
=== Sending via MobileMe
be sent in this method.
no special setup. Just to Mail.deliver &block or message.deliver! and it will
Sending locally (to a postfix or sendmail server running on localhost) requires
=== Sending via SMTP server on Localhost
an easy to use manner.
Mail allows you to send emails using SMTP. This is done by wrapping Net::SMTP in
== Sending Email with SMTP
def build_smtp_session
def build_smtp_session Net::SMTP.new(settings[:address], settings[:port]).tap do |smtp| tls = settings[:tls] || settings[:ssl] if !tls.nil? case tls when true smtp.enable_tls(ssl_context) when false smtp.disable_tls else raise ArgumentError, "Unrecognized :tls value #{settings[:tls].inspect}; expected true, false, or nil" end elsif settings.include?(:enable_starttls) && !settings[:enable_starttls].nil? case settings[:enable_starttls] when true smtp.enable_starttls(ssl_context) when false smtp.disable_starttls else raise ArgumentError, "Unrecognized :enable_starttls value #{settings[:enable_starttls].inspect}; expected true, false, or nil" end elsif settings.include?(:enable_starttls_auto) && !settings[:enable_starttls_auto].nil? case settings[:enable_starttls_auto] when true smtp.enable_starttls_auto(ssl_context) when false smtp.disable_starttls else raise ArgumentError, "Unrecognized :enable_starttls_auto value #{settings[:enable_starttls_auto].inspect}; expected true, false, or nil" end end smtp.open_timeout = settings[:open_timeout] if settings[:open_timeout] smtp.read_timeout = settings[:read_timeout] if settings[:read_timeout] end end
def deliver!(mail)
def deliver!(mail) response = start_smtp_session do |smtp| Mail::SMTPConnection.new(:connection => smtp, :return_response => true).deliver!(mail) end settings[:return_response] ? response : self end
def initialize(values)
def initialize(values) self.settings = DEFAULTS.merge(values) end
def ssl_context
Allow SSL context to be configured via settings, for Ruby >= 1.9
def ssl_context openssl_verify_mode = settings[:openssl_verify_mode] if openssl_verify_mode.kind_of?(String) openssl_verify_mode = OpenSSL::SSL.const_get("VERIFY_#{openssl_verify_mode.upcase}") end context = Net::SMTP.default_ssl_context context.verify_mode = openssl_verify_mode if openssl_verify_mode context.ca_path = settings[:ca_path] if settings[:ca_path] context.ca_file = settings[:ca_file] if settings[:ca_file] context end
def start_smtp_session(&block)
def start_smtp_session(&block) build_smtp_session.start(settings[:domain], settings[:user_name], settings[:password], settings[:authentication], &block) end