Guest User

Untitled

a guest
Mar 2nd, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. require 'socket'
  2. require 'base64'
  3. class SSMTP < TCPSocket
  4.  
  5. def self.start(*args)
  6. s = new(*args[0..1])
  7. s.start(*args[2..5])
  8. yield s
  9. s.close
  10. end
  11.  
  12. attr_accessor :verp
  13.  
  14. def initialize(*)
  15. @remote_opts = {}
  16. @remote_opts[:attrs] = []
  17. super
  18. end
  19.  
  20. def start(ehlo = 'localhost.localdomain', user=nil, pass=nil, method = :login)
  21. puts "EHLO #{ehlo}"
  22. r = recv(500)
  23. lines = r.gsub(/^250\-/).split(/\r\n/)
  24. @remote_opts[:host_name] = lines.shift
  25. lines.each do |line|
  26. case line
  27. when /^SIZE/ then @remote_opts[:max_size] = line.sub(/^SIZE /, '').to_i
  28. when /^AUTH/ then @remote_opts[:login_methods] = line.sub(/^AUTH /, '').split(' ').map { |str| str.downcase.to_sym }
  29. else @remote_opts[:attrs].push line
  30. end
  31. end
  32.  
  33. raise 'Not a remote accepted login method' unless @remote_opts[:login_methods].include?(method)
  34. case method.to_sym
  35. when :login
  36. puts 'AUTH LOGIN'
  37. #r << recv(500)
  38. write Base64.encode64(user)
  39. #r << recv(500)
  40. write Base64.encode64(pass)
  41. #r << recv(500)
  42. else
  43. raise "Unimplemented method: #{method}"
  44. end
  45. r
  46. end
  47.  
  48. def send_message(msg, from, to)
  49. if @verp
  50. from = "<#{from}>" unless from.match('<')
  51. from = "#{from} XVERP"
  52. end
  53. puts "MAIL FROM:#{from}"
  54. puts "RCPT TO:#{to}"
  55. puts "DATA", msg, '.'
  56. recv(500)
  57. end
  58.  
  59. end
Add Comment
Please, Sign In to add comment