Skip to content

Instantly share code, notes, and snippets.

@sproutventure
Created January 7, 2009 21:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save sproutventure/44466 to your computer and use it in GitHub Desktop.
Save sproutventure/44466 to your computer and use it in GitHub Desktop.
Redmine/Rails email through Gmail SMTP
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 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') end
def quit
begin
getok('QUIT')
rescue EOFError
end
end
end
@ylluminate
Copy link

Wonderful! Really appreciate you making this available.

@sriannamalai
Copy link

This saved my work! Thanks a lot!!!

@ylluminate
Copy link

FYI, check out ChiliProject. Replaced Redmine with it and never looking back.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment