class RubySpamAssassin::SpamClient

Public Class Methods

new(host="localhost", port=783, timeout=5) click to toggle source
# File lib/RubySpamAssassin.rb, line 25
def initialize(host="localhost", port=783, timeout=5)
  @port = port
  @host = host
  @timeout =timeout
  @socket = TCPSocket.open(@host, @port)
end

Public Instance Methods

check(message) click to toggle source
# File lib/RubySpamAssassin.rb, line 42
def check(message)
  protocol_response = send_message("CHECK", message)
  result = process_headers protocol_response[0...2]
end
ping() click to toggle source
# File lib/RubySpamAssassin.rb, line 61
def ping
  protocol_response = send_message("PING", message)
  result = process_headers protocol_response[0]
end
process(message)
Alias for: report
reconnect() click to toggle source
# File lib/RubySpamAssassin.rb, line 32
def reconnect
  @socket = @socket || TCPSocket.open(@host, @port)
end
report(message) click to toggle source
# File lib/RubySpamAssassin.rb, line 47
def report(message)
  protocol_response = send_message("REPORT", message)
  result = process_headers protocol_response[0...2]
  result.report = protocol_response[3..-1].join
end
Also aliased as: process
report_ifspam(message) click to toggle source
# File lib/RubySpamAssassin.rb, line 53
def report_ifspam(message)
  result = report(message).spam?
end
send_symbol(message) click to toggle source
# File lib/RubySpamAssassin.rb, line 36
def send_symbol(message)
  protocol_response = send_message("SYMBOLS", message)
  result = process_headers protocol_response[0...2]
  result.tags = protocol_response[3...-1].join(" ").split(',')
end
skip() click to toggle source
# File lib/RubySpamAssassin.rb, line 57
def skip
  protocol_response = send_message("SKIP", message)
end

Private Instance Methods

process_headers(headers) click to toggle source
# File lib/RubySpamAssassin.rb, line 81
def process_headers(headers)
  result = SpamResult.new
  headers.each do |line|
    case line.chomp
      when /(.+)\/(.+) (.+) (.+)/ then
        result.response_version = $2
        result.response_code = $3
        result.response_message = $4
      when /^Spam: (.+) ; (.+) . (.+)$/ then
        result.score = $2
        result.spam = $1
        result.threshold = $3
      when /Content-length: (.+)/ then
        result.content_length = $1
    end
  end
  result
end
send_message(command, message) click to toggle source
# File lib/RubySpamAssassin.rb, line 69
def send_message(command, message)
  length = message.length
  @socket.write(command + " SPAMC/1.2\r\n")
  @socket.write("Content-length: " + length.to_s + "\r\n\r\n")
  @socket.write(message)
  @socket.shutdown(1) #have to shutdown sending side to get response
  response = @socket.readlines
  @socket.close #might as well close it now

  response
end