class SMTP::Session

Attributes

active[RW]
connection[RW]
domain[RW]
forward_path[RW]
host[RW]
message[RW]
reverse_path[RW]

Public Class Methods

new(connection, host) click to toggle source
# File lib/drillmail/smtp.rb, line 35
def initialize(connection, host)
  @connection = connection
  @host = host
  @active = true
  @domain = nil
  setup_session
end

Public Instance Methods

process(request_string) click to toggle source
# File lib/drillmail/smtp.rb, line 68
def process(request_string)
  if request_string
    request_array = request_string.split(' ')
    {
      command: request_array.shift.to_sym,
      body: request_array.join(' ')
    }
  else
    { command: :NOOP, body: '' }
  end
end
route(request) click to toggle source
# File lib/drillmail/smtp.rb, line 80
def route(request)
  puts "Requesting: #{request[:command]} #{request[:body]}"
  if commands.key?(request[:command])
    response = commands[request[:command]].call(request[:body])
  else
    response = reply(500)
  end
  puts "Responding: #{response}"
  response
end
run() click to toggle source
# File lib/drillmail/smtp.rb, line 49
def run
  begin
    @connection.puts reply(220, "#{@host} Simple Mail Transfer")

    while @active 
      @connection.sync = true
      request = @connection.gets
      response = route(process(request))
      @connection.puts "#{response}\r\n"
    end
  rescue => e
    @connection.puts reply(421, e)
    puts e, e.backtrace
  ensure
      @connection.shutdown(:RDWR)
      @connection.close
  end
end
setup_session() click to toggle source
# File lib/drillmail/smtp.rb, line 43
def setup_session
  @reverse_path = ''
  @forward_path = ''
  @message = []
end