Skip to content

Instantly share code, notes, and snippets.

@timothyjoh
Forked from bcalloway/environment.rb
Created March 13, 2009 19:04
Show Gist options
  • Save timothyjoh/78706 to your computer and use it in GitHub Desktop.
Save timothyjoh/78706 to your computer and use it in GitHub Desktop.
#
# Add this to the bottom of environment.rb
#
require 'smtp_tls'
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.smtp_settings = {
:tls => true,
:address => "smtp.gmail.com" ,
:port => 587,
:domain => "mydomain.com" ,
:authentication => :plain,
:user_name => "[email protected]" ,
:password => "mypassword" ,
}
require "openssl"
require "net/smtp"
Net::SMTP.class_eval do
private
def do_start(helodomain, user, secret, authtype)
raise IOError, 'SMTP session already started' if @started
check_auth_args user, secret, authtype if user or secret
sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
@socket = Net::InternetMessageIO.new(sock)
@socket.read_timeout = 60 #@read_timeout
check_response(critical { recv_response() })
do_helo(helodomain)
if starttls
raise 'openssl library not installed' unless defined?(OpenSSL)
ssl = OpenSSL::SSL::SSLSocket.new(sock)
ssl.sync_close = true
ssl.connect
@socket = Net::InternetMessageIO.new(ssl)
@socket.read_timeout = 60 #@read_timeout
do_helo(helodomain)
end
authenticate user, secret, authtype if user
@started = true
ensure
unless @started
# authentication failed, cancel connection.
@socket.close if not @started and @socket and not @socket.closed?
@socket = nil
end
end
def do_helo(helodomain)
begin
if @esmtp
ehlo helodomain
else
helo helodomain
end
rescue Net::ProtocolError
if @esmtp
@esmtp = false
@error_occured = false
retry
end
raise
end
end
def starttls
getok('STARTTLS') rescue return false
return true
end
def quit
begin
getok('QUIT')
rescue EOFError
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment