Class: Net::SMTP::Response

Inherits:
Object
  • Object
show all
Defined in:
lib/net/smtp.rb

Overview

This class represents a response received by the SMTP server. Instances of this class are created by the SMTP class; they should not be directly created by the user. For more information on SMTP responses, view Section 4.2 of RFC 5321

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(status, string) ⇒ Response

Creates a new instance of the Response class and sets the status and string attributes



1059
1060
1061
1062
# File 'lib/net/smtp.rb', line 1059

def initialize(status, string)
  @status = status
  @string = string
end

Instance Attribute Details

#statusObject (readonly)

The three digit reply code of the SMTP response



1065
1066
1067
# File 'lib/net/smtp.rb', line 1065

def status
  @status
end

#stringObject (readonly)

The human readable reply text of the SMTP response



1068
1069
1070
# File 'lib/net/smtp.rb', line 1068

def string
  @string
end

Class Method Details

.parse(str) ⇒ Object

Parses the received response and separates the reply code and the human readable reply text



1053
1054
1055
# File 'lib/net/smtp.rb', line 1053

def self.parse(str)
  new(str[0,3], str)
end

Instance Method Details

#capabilitiesObject

Returns a hash of the human readable reply text in the response if it is multiple lines. It does not return the first line. The key of the hash is the first word the value of the hash is an array with each word thereafter being a value in the array



1102
1103
1104
1105
1106
1107
1108
1109
1110
# File 'lib/net/smtp.rb', line 1102

def capabilities
  return {} unless @string[3, 1] == '-'
  h = {}
  @string.lines.drop(1).each do |line|
    k, *v = line[4..-1].split(' ')
    h[k] = v
  end
  h
end

#continue?Boolean

Determines whether the response received was a Positive Intermediate reply (3xx reply code)

Returns:

  • (Boolean)


1083
1084
1085
# File 'lib/net/smtp.rb', line 1083

def continue?
  status_type_char() == '3'
end

#cram_md5_challengeObject

Creates a CRAM-MD5 challenge. You can view more information on CRAM-MD5 on Wikipedia: en.wikipedia.org/wiki/CRAM-MD5



1094
1095
1096
# File 'lib/net/smtp.rb', line 1094

def cram_md5_challenge
  @string.split(/ /)[1].unpack1('m')
end

#exception_classObject

Determines whether there was an error and raises the appropriate error based on the reply code of the response



1114
1115
1116
1117
1118
1119
1120
1121
1122
# File 'lib/net/smtp.rb', line 1114

def exception_class
  case @status
  when /\A4/  then SMTPServerBusy
  when /\A50/ then SMTPSyntaxError
  when /\A53/ then SMTPAuthenticationError
  when /\A5/  then SMTPFatalError
  else             SMTPUnknownError
  end
end

#messageObject

The first line of the human readable reply text



1088
1089
1090
# File 'lib/net/smtp.rb', line 1088

def message
  @string.lines.first
end

#status_type_charObject

Takes the first digit of the reply code to determine the status type



1071
1072
1073
# File 'lib/net/smtp.rb', line 1071

def status_type_char
  @status[0, 1]
end

#success?Boolean

Determines whether the response received was a Positive Completion reply (2xx reply code)

Returns:

  • (Boolean)


1077
1078
1079
# File 'lib/net/smtp.rb', line 1077

def success?
  status_type_char() == '2'
end