def deliver!(mail)
envelope_from, destinations, message = check_params(mail)
smtp = Net::SMTP.new(settings[:address], settings[:port])
if settings[:tls] || settings[:ssl]
if smtp.respond_to?(:enable_tls)
unless settings[:openssl_verify_mode]
smtp.enable_tls
else
openssl_verify_mode = settings[:openssl_verify_mode]
if openssl_verify_mode.kind_of?(String)
openssl_verify_mode = "OpenSSL::SSL::VERIFY_#{openssl_verify_mode.upcase}".constantize
end
context = Net::SMTP.default_ssl_context
context.verify_mode = openssl_verify_mode
smtp.enable_tls(context)
end
end
elsif settings[:enable_starttls_auto]
if smtp.respond_to?(:enable_starttls_auto)
unless settings[:openssl_verify_mode]
smtp.enable_starttls_auto
else
openssl_verify_mode = settings[:openssl_verify_mode]
if openssl_verify_mode.kind_of?(String)
openssl_verify_mode = "OpenSSL::SSL::VERIFY_#{openssl_verify_mode.upcase}".constantize
end
if RUBY_VERSION >= '1.9.0'
context = Net::SMTP.default_ssl_context
context.verify_mode = openssl_verify_mode
smtp.enable_tls(context)
else
smtp.enable_tls(openssl_verify_mode)
end
end
end
end
response = nil
smtp.start(settings[:domain], settings[:user_name], settings[:password], settings[:authentication]) do |smtp_obj|
response = smtp_obj.sendmail(message, envelope_from, destinations)
end
return settings[:return_response] ? response : self
end