Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'socket'
- require 'base64'
- class SSMTP < TCPSocket
- def self.start(*args)
- s = new(*args[0..1])
- s.start(*args[2..5])
- yield s
- s.close
- end
- attr_accessor :verp
- def initialize(*)
- @remote_opts = {}
- @remote_opts[:attrs] = []
- super
- end
- def start(ehlo = 'localhost.localdomain', user=nil, pass=nil, method = :login)
- puts "EHLO #{ehlo}"
- r = recv(500)
- lines = r.gsub(/^250\-/).split(/\r\n/)
- @remote_opts[:host_name] = lines.shift
- lines.each do |line|
- case line
- when /^SIZE/ then @remote_opts[:max_size] = line.sub(/^SIZE /, '').to_i
- when /^AUTH/ then @remote_opts[:login_methods] = line.sub(/^AUTH /, '').split(' ').map { |str| str.downcase.to_sym }
- else @remote_opts[:attrs].push line
- end
- end
- raise 'Not a remote accepted login method' unless @remote_opts[:login_methods].include?(method)
- case method.to_sym
- when :login
- puts 'AUTH LOGIN'
- #r << recv(500)
- write Base64.encode64(user)
- #r << recv(500)
- write Base64.encode64(pass)
- #r << recv(500)
- else
- raise "Unimplemented method: #{method}"
- end
- r
- end
- def send_message(msg, from, to)
- if @verp
- from = "<#{from}>" unless from.match('<')
- from = "#{from} XVERP"
- end
- puts "MAIL FROM:#{from}"
- puts "RCPT TO:#{to}"
- puts "DATA", msg, '.'
- recv(500)
- end
- end
Add Comment
Please, Sign In to add comment