mail 2.5.5 → 2.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. checksums.yaml +5 -5
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +170 -108
  4. data/lib/mail/attachments_list.rb +13 -10
  5. data/lib/mail/body.rb +105 -91
  6. data/lib/mail/check_delivery_params.rb +30 -22
  7. data/lib/mail/configuration.rb +3 -0
  8. data/lib/mail/constants.rb +79 -0
  9. data/lib/mail/elements/address.rb +118 -174
  10. data/lib/mail/elements/address_list.rb +16 -56
  11. data/lib/mail/elements/content_disposition_element.rb +12 -22
  12. data/lib/mail/elements/content_location_element.rb +9 -17
  13. data/lib/mail/elements/content_transfer_encoding_element.rb +8 -19
  14. data/lib/mail/elements/content_type_element.rb +20 -30
  15. data/lib/mail/elements/date_time_element.rb +10 -21
  16. data/lib/mail/elements/envelope_from_element.rb +23 -31
  17. data/lib/mail/elements/message_ids_element.rb +22 -20
  18. data/lib/mail/elements/mime_version_element.rb +10 -21
  19. data/lib/mail/elements/phrase_list.rb +13 -15
  20. data/lib/mail/elements/received_element.rb +26 -21
  21. data/lib/mail/elements.rb +1 -0
  22. data/lib/mail/encodings/7bit.rb +10 -14
  23. data/lib/mail/encodings/8bit.rb +5 -18
  24. data/lib/mail/encodings/base64.rb +15 -10
  25. data/lib/mail/encodings/binary.rb +4 -22
  26. data/lib/mail/encodings/identity.rb +24 -0
  27. data/lib/mail/encodings/quoted_printable.rb +13 -7
  28. data/lib/mail/encodings/transfer_encoding.rb +47 -28
  29. data/lib/mail/encodings/unix_to_unix.rb +20 -0
  30. data/lib/mail/encodings.rb +102 -93
  31. data/lib/mail/envelope.rb +12 -19
  32. data/lib/mail/field.rb +143 -71
  33. data/lib/mail/field_list.rb +73 -19
  34. data/lib/mail/fields/bcc_field.rb +42 -48
  35. data/lib/mail/fields/cc_field.rb +29 -50
  36. data/lib/mail/fields/comments_field.rb +28 -37
  37. data/lib/mail/fields/common_address_field.rb +170 -0
  38. data/lib/mail/fields/common_date_field.rb +58 -0
  39. data/lib/mail/fields/common_field.rb +77 -0
  40. data/lib/mail/fields/common_message_id_field.rb +42 -0
  41. data/lib/mail/fields/content_description_field.rb +8 -14
  42. data/lib/mail/fields/content_disposition_field.rb +20 -44
  43. data/lib/mail/fields/content_id_field.rb +25 -51
  44. data/lib/mail/fields/content_location_field.rb +12 -25
  45. data/lib/mail/fields/content_transfer_encoding_field.rb +31 -36
  46. data/lib/mail/fields/content_type_field.rb +51 -80
  47. data/lib/mail/fields/date_field.rb +24 -52
  48. data/lib/mail/fields/from_field.rb +29 -50
  49. data/lib/mail/fields/in_reply_to_field.rb +39 -49
  50. data/lib/mail/fields/keywords_field.rb +19 -32
  51. data/lib/mail/fields/message_id_field.rb +26 -71
  52. data/lib/mail/fields/mime_version_field.rb +20 -30
  53. data/lib/mail/fields/named_structured_field.rb +11 -0
  54. data/lib/mail/fields/named_unstructured_field.rb +11 -0
  55. data/lib/mail/fields/optional_field.rb +10 -7
  56. data/lib/mail/fields/{common/parameter_hash.rb → parameter_hash.rb} +16 -13
  57. data/lib/mail/fields/received_field.rb +44 -57
  58. data/lib/mail/fields/references_field.rb +36 -49
  59. data/lib/mail/fields/reply_to_field.rb +29 -50
  60. data/lib/mail/fields/resent_bcc_field.rb +29 -50
  61. data/lib/mail/fields/resent_cc_field.rb +29 -50
  62. data/lib/mail/fields/resent_date_field.rb +6 -30
  63. data/lib/mail/fields/resent_from_field.rb +29 -50
  64. data/lib/mail/fields/resent_message_id_field.rb +6 -29
  65. data/lib/mail/fields/resent_sender_field.rb +28 -57
  66. data/lib/mail/fields/resent_to_field.rb +29 -50
  67. data/lib/mail/fields/return_path_field.rb +51 -55
  68. data/lib/mail/fields/sender_field.rb +35 -56
  69. data/lib/mail/fields/structured_field.rb +4 -30
  70. data/lib/mail/fields/subject_field.rb +10 -11
  71. data/lib/mail/fields/to_field.rb +29 -50
  72. data/lib/mail/fields/unstructured_field.rb +43 -51
  73. data/lib/mail/fields.rb +1 -0
  74. data/lib/mail/header.rb +78 -129
  75. data/lib/mail/indifferent_hash.rb +1 -0
  76. data/lib/mail/mail.rb +18 -11
  77. data/lib/mail/matchers/attachment_matchers.rb +44 -0
  78. data/lib/mail/matchers/has_sent_mail.rb +81 -4
  79. data/lib/mail/message.rb +142 -139
  80. data/lib/mail/multibyte/chars.rb +24 -180
  81. data/lib/mail/multibyte/unicode.rb +32 -27
  82. data/lib/mail/multibyte/utils.rb +27 -43
  83. data/lib/mail/multibyte.rb +56 -16
  84. data/lib/mail/network/delivery_methods/exim.rb +6 -4
  85. data/lib/mail/network/delivery_methods/file_delivery.rb +12 -10
  86. data/lib/mail/network/delivery_methods/logger_delivery.rb +34 -0
  87. data/lib/mail/network/delivery_methods/sendmail.rb +63 -21
  88. data/lib/mail/network/delivery_methods/smtp.rb +76 -50
  89. data/lib/mail/network/delivery_methods/smtp_connection.rb +4 -4
  90. data/lib/mail/network/delivery_methods/test_mailer.rb +5 -2
  91. data/lib/mail/network/retriever_methods/base.rb +9 -8
  92. data/lib/mail/network/retriever_methods/imap.rb +37 -18
  93. data/lib/mail/network/retriever_methods/pop3.rb +6 -3
  94. data/lib/mail/network/retriever_methods/test_retriever.rb +4 -2
  95. data/lib/mail/network.rb +2 -0
  96. data/lib/mail/parser_tools.rb +15 -0
  97. data/lib/mail/parsers/address_lists_parser.rb +33242 -0
  98. data/lib/mail/parsers/address_lists_parser.rl +179 -0
  99. data/lib/mail/parsers/content_disposition_parser.rb +901 -0
  100. data/lib/mail/parsers/content_disposition_parser.rl +89 -0
  101. data/lib/mail/parsers/content_location_parser.rb +822 -0
  102. data/lib/mail/parsers/content_location_parser.rl +78 -0
  103. data/lib/mail/parsers/content_transfer_encoding_parser.rb +522 -0
  104. data/lib/mail/parsers/content_transfer_encoding_parser.rl +71 -0
  105. data/lib/mail/parsers/content_type_parser.rb +1048 -0
  106. data/lib/mail/parsers/content_type_parser.rl +90 -0
  107. data/lib/mail/parsers/date_time_parser.rb +891 -0
  108. data/lib/mail/parsers/date_time_parser.rl +69 -0
  109. data/lib/mail/parsers/envelope_from_parser.rb +3675 -0
  110. data/lib/mail/parsers/envelope_from_parser.rl +89 -0
  111. data/lib/mail/parsers/message_ids_parser.rb +5161 -0
  112. data/lib/mail/parsers/message_ids_parser.rl +93 -0
  113. data/lib/mail/parsers/mime_version_parser.rb +513 -0
  114. data/lib/mail/parsers/mime_version_parser.rl +68 -0
  115. data/lib/mail/parsers/phrase_lists_parser.rb +884 -0
  116. data/lib/mail/parsers/phrase_lists_parser.rl +90 -0
  117. data/lib/mail/parsers/received_parser.rb +8782 -0
  118. data/lib/mail/parsers/received_parser.rl +91 -0
  119. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +13 -0
  120. data/lib/mail/parsers/rfc2045_content_type.rl +25 -0
  121. data/lib/mail/parsers/rfc2045_mime.rl +16 -0
  122. data/lib/mail/parsers/rfc2183_content_disposition.rl +15 -0
  123. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  124. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +22 -0
  125. data/lib/mail/parsers/rfc5322.rl +74 -0
  126. data/lib/mail/parsers/rfc5322_address.rl +72 -0
  127. data/lib/mail/parsers/rfc5322_date_time.rl +37 -0
  128. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
  129. data/lib/mail/parsers.rb +13 -0
  130. data/lib/mail/part.rb +11 -12
  131. data/lib/mail/parts_list.rb +90 -14
  132. data/lib/mail/smtp_envelope.rb +57 -0
  133. data/lib/mail/utilities.rb +415 -76
  134. data/lib/mail/values/unicode_tables.dat +0 -0
  135. data/lib/mail/version.rb +8 -15
  136. data/lib/mail/yaml.rb +30 -0
  137. data/lib/mail.rb +9 -32
  138. metadata +127 -79
  139. data/CHANGELOG.rdoc +0 -742
  140. data/CONTRIBUTING.md +0 -45
  141. data/Dependencies.txt +0 -3
  142. data/Gemfile +0 -32
  143. data/Rakefile +0 -21
  144. data/TODO.rdoc +0 -9
  145. data/lib/VERSION +0 -4
  146. data/lib/load_parsers.rb +0 -35
  147. data/lib/mail/core_extensions/nil.rb +0 -19
  148. data/lib/mail/core_extensions/object.rb +0 -13
  149. data/lib/mail/core_extensions/smtp.rb +0 -24
  150. data/lib/mail/core_extensions/string/access.rb +0 -145
  151. data/lib/mail/core_extensions/string/multibyte.rb +0 -78
  152. data/lib/mail/core_extensions/string.rb +0 -33
  153. data/lib/mail/fields/common/address_container.rb +0 -16
  154. data/lib/mail/fields/common/common_address.rb +0 -140
  155. data/lib/mail/fields/common/common_date.rb +0 -42
  156. data/lib/mail/fields/common/common_field.rb +0 -57
  157. data/lib/mail/fields/common/common_message_id.rb +0 -48
  158. data/lib/mail/multibyte/exceptions.rb +0 -8
  159. data/lib/mail/parsers/address_lists.rb +0 -64
  160. data/lib/mail/parsers/address_lists.treetop +0 -19
  161. data/lib/mail/parsers/content_disposition.rb +0 -535
  162. data/lib/mail/parsers/content_disposition.treetop +0 -46
  163. data/lib/mail/parsers/content_location.rb +0 -139
  164. data/lib/mail/parsers/content_location.treetop +0 -20
  165. data/lib/mail/parsers/content_transfer_encoding.rb +0 -201
  166. data/lib/mail/parsers/content_transfer_encoding.treetop +0 -18
  167. data/lib/mail/parsers/content_type.rb +0 -971
  168. data/lib/mail/parsers/content_type.treetop +0 -68
  169. data/lib/mail/parsers/date_time.rb +0 -114
  170. data/lib/mail/parsers/date_time.treetop +0 -11
  171. data/lib/mail/parsers/envelope_from.rb +0 -194
  172. data/lib/mail/parsers/envelope_from.treetop +0 -32
  173. data/lib/mail/parsers/message_ids.rb +0 -45
  174. data/lib/mail/parsers/message_ids.treetop +0 -15
  175. data/lib/mail/parsers/mime_version.rb +0 -144
  176. data/lib/mail/parsers/mime_version.treetop +0 -19
  177. data/lib/mail/parsers/phrase_lists.rb +0 -45
  178. data/lib/mail/parsers/phrase_lists.treetop +0 -15
  179. data/lib/mail/parsers/received.rb +0 -71
  180. data/lib/mail/parsers/received.treetop +0 -11
  181. data/lib/mail/parsers/rfc2045.rb +0 -421
  182. data/lib/mail/parsers/rfc2045.treetop +0 -35
  183. data/lib/mail/parsers/rfc2822.rb +0 -5397
  184. data/lib/mail/parsers/rfc2822.treetop +0 -408
  185. data/lib/mail/parsers/rfc2822_obsolete.rb +0 -3768
  186. data/lib/mail/parsers/rfc2822_obsolete.treetop +0 -241
  187. data/lib/mail/patterns.rb +0 -35
  188. data/lib/mail/version_specific/ruby_1_8.rb +0 -119
  189. data/lib/mail/version_specific/ruby_1_9.rb +0 -147
  190. data/lib/tasks/corpus.rake +0 -125
  191. data/lib/tasks/treetop.rake +0 -10
@@ -1,34 +1,25 @@
1
1
  # encoding: utf-8
2
- #
3
- #
4
- #
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/named_structured_field'
4
+ require 'mail/utilities'
5
+
5
6
  module Mail
6
- class MimeVersionField < StructuredField
7
-
8
- FIELD_NAME = 'mime-version'
9
- CAPITALIZED_FIELD = 'Mime-Version'
10
-
11
- def initialize(value = nil, charset = 'utf-8')
12
- self.charset = charset
13
- if value.blank?
14
- value = '1.0'
15
- end
16
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
17
- self.parse
18
- self
19
-
20
- end
21
-
22
- def parse(val = value)
23
- unless val.blank?
24
- @element = Mail::MimeVersionElement.new(val)
25
- end
26
- end
27
-
7
+ class MimeVersionField < NamedStructuredField #:nodoc:
8
+ NAME = 'Mime-Version'
9
+
10
+ def self.singular?
11
+ true
12
+ end
13
+
14
+ def initialize(value = nil, charset = nil)
15
+ value = '1.0' if Utilities.blank?(value)
16
+ super value, charset
17
+ end
18
+
28
19
  def element
29
20
  @element ||= Mail::MimeVersionElement.new(value)
30
21
  end
31
-
22
+
32
23
  def version
33
24
  "#{element.major}.#{element.minor}"
34
25
  end
@@ -40,14 +31,13 @@ module Mail
40
31
  def minor
41
32
  element.minor.to_i
42
33
  end
43
-
34
+
44
35
  def encoded
45
- "#{CAPITALIZED_FIELD}: #{version}\r\n"
36
+ "#{name}: #{version}\r\n"
46
37
  end
47
-
38
+
48
39
  def decoded
49
40
  version
50
41
  end
51
-
52
42
  end
53
43
  end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/structured_field'
4
+
5
+ module Mail
6
+ class NamedStructuredField < StructuredField #:nodoc:
7
+ def initialize(value = nil, charset = nil)
8
+ super self.class::NAME, value, charset
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/unstructured_field'
4
+
5
+ module Mail
6
+ class NamedUnstructuredField < UnstructuredField #:nodoc:
7
+ def initialize(value = nil, charset = nil)
8
+ super self.class::NAME, value, charset
9
+ end
10
+ end
11
+ end
@@ -1,13 +1,16 @@
1
1
  # encoding: utf-8
2
- #
3
- # The field names of any optional-field MUST NOT be identical to any
4
- # field name specified elsewhere in this standard.
5
- #
6
- # optional-field = field-name ":" unstructured CRLF
2
+ # frozen_string_literal: true
7
3
  require 'mail/fields/unstructured_field'
8
4
 
9
5
  module Mail
10
- class OptionalField < UnstructuredField
11
-
6
+ # The field names of any optional-field MUST NOT be identical to any
7
+ # field name specified elsewhere in this standard.
8
+ #
9
+ # optional-field = field-name ":" unstructured CRLF
10
+ class OptionalField < UnstructuredField #:nodoc:
11
+ private
12
+ def do_encode
13
+ "#{wrapped_value}\r\n"
14
+ end
12
15
  end
13
16
  end
@@ -1,35 +1,38 @@
1
1
  # encoding: utf-8
2
- module Mail
2
+ # frozen_string_literal: true
3
+ require 'mail/constants'
4
+ require 'mail/indifferent_hash'
5
+ require 'mail/encodings'
3
6
 
7
+ module Mail
4
8
  # ParameterHash is an intelligent Hash that allows you to add
5
9
  # parameter values including the MIME extension paramaters that
6
10
  # have the name*0="blah", name*1="bleh" keys, and will just return
7
11
  # a single key called name="blahbleh" and do any required un-encoding
8
12
  # to make that happen
9
- # Parameters are defined in RFC2045, split keys are in RFC2231
10
-
11
- class ParameterHash < IndifferentHash
12
-
13
- include Mail::Utilities
14
-
13
+ #
14
+ # Parameters are defined in RFC2045. Split keys are in RFC2231.
15
+ class ParameterHash < IndifferentHash #:nodoc:
15
16
  def [](key_name)
16
17
  key_pattern = Regexp.escape(key_name.to_s)
17
18
  pairs = []
18
19
  exact = nil
20
+
19
21
  each do |k,v|
20
22
  if k =~ /^#{key_pattern}(\*|$)/i
21
- if $1 == '*'
23
+ if $1 == Constants::ASTERISK
22
24
  pairs << [k, v]
23
25
  else
24
26
  exact = k
25
27
  end
26
28
  end
27
29
  end
30
+
28
31
  if pairs.empty? # Just dealing with a single value pair
29
32
  super(exact || key_name)
30
33
  else # Dealing with a multiple value pair or a single encoded value pair
31
34
  string = pairs.sort { |a,b| a.first.to_s <=> b.first.to_s }.map { |v| v.last }.join('')
32
- if mt = string.match(/([\w\-]+)'(\w\w)'(.*)/)
35
+ if mt = string.match(/([\w\-]+)?'(\w\w)?'(.*)/)
33
36
  string = mt[3]
34
37
  encoding = mt[1]
35
38
  else
@@ -40,18 +43,18 @@ module Mail
40
43
  end
41
44
 
42
45
  def encoded
43
- map.sort { |a,b| a.first.to_s <=> b.first.to_s }.map do |key_name, value|
46
+ map.sort_by { |a| a.first.to_s }.map! do |key_name, value|
44
47
  unless value.ascii_only?
45
48
  value = Mail::Encodings.param_encode(value)
46
49
  key_name = "#{key_name}*"
47
50
  end
48
- %Q{#{key_name}=#{quote_token(value)}}
51
+ %Q{#{key_name}=#{Utilities.quote_token(value)}}
49
52
  end.join(";\r\n\s")
50
53
  end
51
54
 
52
55
  def decoded
53
- map.sort { |a,b| a.first.to_s <=> b.first.to_s }.map do |key_name, value|
54
- %Q{#{key_name}=#{quote_token(value)}}
56
+ map.sort_by { |a| a.first.to_s }.map! do |key_name, value|
57
+ %Q{#{key_name}=#{Utilities.quote_token(value)}}
55
58
  end.join("; ")
56
59
  end
57
60
  end
@@ -1,75 +1,62 @@
1
1
  # encoding: utf-8
2
- #
3
- # trace = [return]
4
- # 1*received
5
- #
6
- # return = "Return-Path:" path CRLF
7
- #
8
- # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) /
9
- # obs-path
10
- #
11
- # received = "Received:" name-val-list ";" date-time CRLF
12
- #
13
- # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)]
14
- #
15
- # name-val-pair = item-name CFWS item-value
16
- #
17
- # item-name = ALPHA *(["-"] (ALPHA / DIGIT))
18
- #
19
- # item-value = 1*angle-addr / addr-spec /
20
- # atom / domain / msg-id
21
- #
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/named_structured_field'
4
+
22
5
  module Mail
23
- class ReceivedField < StructuredField
24
-
25
- FIELD_NAME = 'received'
26
- CAPITALIZED_FIELD = 'Received'
27
-
28
- def initialize(value = nil, charset = 'utf-8')
29
- self.charset = charset
30
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
31
- self.parse
32
- self
6
+ # trace = [return]
7
+ # 1*received
8
+ #
9
+ # return = "Return-Path:" path CRLF
10
+ #
11
+ # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) /
12
+ # obs-path
13
+ #
14
+ # received = "Received:" name-val-list ";" date-time CRLF
15
+ #
16
+ # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)]
17
+ #
18
+ # name-val-pair = item-name CFWS item-value
19
+ #
20
+ # item-name = ALPHA *(["-"] (ALPHA / DIGIT))
21
+ #
22
+ # item-value = 1*angle-addr / addr-spec /
23
+ # atom / domain / msg-id
24
+ class ReceivedField < NamedStructuredField #:nodoc:
25
+ NAME = 'Received'
33
26
 
34
- end
35
-
36
- def parse(val = value)
37
- unless val.blank?
38
- @element = Mail::ReceivedElement.new(val)
39
- end
40
- end
41
-
42
27
  def element
43
28
  @element ||= Mail::ReceivedElement.new(value)
44
29
  end
45
-
30
+
46
31
  def date_time
47
- @datetime ||= ::DateTime.parse("#{element.date_time}")
32
+ @datetime ||= element.date_time
48
33
  end
49
34
 
50
35
  def info
51
36
  element.info
52
37
  end
53
-
38
+
54
39
  def formatted_date
55
- date_time.strftime("%a, %d %b %Y %H:%M:%S ") + date_time.zone.delete(':')
56
- end
57
-
58
- def encoded
59
- if value.blank?
60
- "#{CAPITALIZED_FIELD}: \r\n"
61
- else
62
- "#{CAPITALIZED_FIELD}: #{info}; #{formatted_date}\r\n"
40
+ if date_time.respond_to? :strftime and date_time.respond_to? :zone
41
+ date_time.strftime("%a, %d %b %Y %H:%M:%S ") + date_time.zone.delete(':')
63
42
  end
64
43
  end
65
-
66
- def decoded
67
- if value.blank?
68
- ""
69
- else
70
- "#{info}; #{formatted_date}"
44
+
45
+ private
46
+ def do_encode
47
+ if Utilities.blank?(value)
48
+ "#{name}: \r\n"
49
+ else
50
+ "#{name}: #{info}; #{formatted_date}\r\n"
51
+ end
52
+ end
53
+
54
+ def do_decode
55
+ if Utilities.blank?(value)
56
+ ""
57
+ else
58
+ "#{info}; #{formatted_date}"
59
+ end
71
60
  end
72
- end
73
-
74
61
  end
75
62
  end
@@ -1,56 +1,43 @@
1
1
  # encoding: utf-8
2
- #
3
- # = References Field
4
- #
5
- # The References field inherits references StructuredField and handles the References: header
6
- # field in the email.
7
- #
8
- # Sending references to a mail message will instantiate a Mail::Field object that
9
- # has a ReferencesField as its field type. This includes all Mail::CommonAddress
10
- # module instance metods.
11
- #
12
- # Note that, the #message_ids method will return an array of message IDs without the
13
- # enclosing angle brackets which per RFC are not syntactically part of the message id.
14
- #
15
- # Only one References field can appear in a header, though it can have multiple
16
- # Message IDs.
17
- #
18
- # == Examples:
19
- #
20
- # mail = Mail.new
21
- # mail.references = '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
22
- # mail.references #=> '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
23
- # mail[:references] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
24
- # mail['references'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
25
- # mail['References'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
26
- #
27
- # mail[:references].message_ids #=> ['F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom']
28
- #
29
- require 'mail/fields/common/common_message_id'
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/common_message_id_field'
30
4
 
31
5
  module Mail
32
- class ReferencesField < StructuredField
33
-
34
- include CommonMessageId
35
-
36
- FIELD_NAME = 'references'
37
- CAPITALIZED_FIELD = 'References'
38
-
39
- def initialize(value = nil, charset = 'utf-8')
40
- self.charset = charset
41
- value = value.join("\r\n\s") if value.is_a?(Array)
42
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
43
- self.parse
44
- self
45
- end
46
-
47
- def encoded
48
- do_encode(CAPITALIZED_FIELD)
6
+ # = References Field
7
+ #
8
+ # The References field inherits references StructuredField and handles the References: header
9
+ # field in the email.
10
+ #
11
+ # Sending references to a mail message will instantiate a Mail::Field object that
12
+ # has a ReferencesField as its field type. This includes all Mail::CommonAddress
13
+ # module instance metods.
14
+ #
15
+ # Note that, the #message_ids method will return an array of message IDs without the
16
+ # enclosing angle brackets which per RFC are not syntactically part of the message id.
17
+ #
18
+ # Only one References field can appear in a header, though it can have multiple
19
+ # Message IDs.
20
+ #
21
+ # == Examples:
22
+ #
23
+ # mail = Mail.new
24
+ # mail.references = '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
25
+ # mail.references #=> '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
26
+ # mail[:references] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
27
+ # mail['references'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
28
+ # mail['References'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
29
+ #
30
+ # mail[:references].message_ids #=> ['F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom']
31
+ class ReferencesField < CommonMessageIdField #:nodoc:
32
+ NAME = 'References'
33
+
34
+ def self.singular?
35
+ true
49
36
  end
50
-
51
- def decoded
52
- do_decode
37
+
38
+ def initialize(value = nil, charset = nil)
39
+ value = value.join("\r\n\s") if value.is_a?(Array)
40
+ super value, charset
53
41
  end
54
-
55
42
  end
56
43
  end
@@ -1,55 +1,34 @@
1
1
  # encoding: utf-8
2
- #
3
- # = Reply-To Field
4
- #
5
- # The Reply-To field inherits reply-to StructuredField and handles the Reply-To: header
6
- # field in the email.
7
- #
8
- # Sending reply_to to a mail message will instantiate a Mail::Field object that
9
- # has a ReplyToField as its field type. This includes all Mail::CommonAddress
10
- # module instance metods.
11
- #
12
- # Only one Reply-To field can appear in a header, though it can have multiple
13
- # addresses and groups of addresses.
14
- #
15
- # == Examples:
16
- #
17
- # mail = Mail.new
18
- # mail.reply_to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
19
- # mail.reply_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
20
- # mail[:reply_to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
21
- # mail['reply-to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
22
- # mail['Reply-To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
23
- #
24
- # mail[:reply_to].encoded #=> 'Reply-To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
25
- # mail[:reply_to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
26
- # mail[:reply_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
27
- # mail[:reply_to].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
28
- #
29
- require 'mail/fields/common/common_address'
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/common_address_field'
30
4
 
31
5
  module Mail
32
- class ReplyToField < StructuredField
33
-
34
- include Mail::CommonAddress
35
-
36
- FIELD_NAME = 'reply-to'
37
- CAPITALIZED_FIELD = 'Reply-To'
38
-
39
- def initialize(value = nil, charset = 'utf-8')
40
- self.charset = charset
41
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
42
- self.parse
43
- self
44
- end
45
-
46
- def encoded
47
- do_encode(CAPITALIZED_FIELD)
48
- end
49
-
50
- def decoded
51
- do_decode
52
- end
53
-
6
+ # = Reply-To Field
7
+ #
8
+ # The Reply-To field inherits reply-to StructuredField and handles the Reply-To: header
9
+ # field in the email.
10
+ #
11
+ # Sending reply_to to a mail message will instantiate a Mail::Field object that
12
+ # has a ReplyToField as its field type. This includes all Mail::CommonAddress
13
+ # module instance metods.
14
+ #
15
+ # Only one Reply-To field can appear in a header, though it can have multiple
16
+ # addresses and groups of addresses.
17
+ #
18
+ # == Examples:
19
+ #
20
+ # mail = Mail.new
21
+ # mail.reply_to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
22
+ # mail.reply_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
23
+ # mail[:reply_to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
24
+ # mail['reply-to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
25
+ # mail['Reply-To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
26
+ #
27
+ # mail[:reply_to].encoded #=> 'Reply-To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
28
+ # mail[:reply_to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
29
+ # mail[:reply_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
30
+ # mail[:reply_to].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
31
+ class ReplyToField < CommonAddressField #:nodoc:
32
+ NAME = 'Reply-To'
54
33
  end
55
34
  end
@@ -1,55 +1,34 @@
1
1
  # encoding: utf-8
2
- #
3
- # = Resent-Bcc Field
4
- #
5
- # The Resent-Bcc field inherits resent-bcc StructuredField and handles the
6
- # Resent-Bcc: header field in the email.
7
- #
8
- # Sending resent_bcc to a mail message will instantiate a Mail::Field object that
9
- # has a ResentBccField as its field type. This includes all Mail::CommonAddress
10
- # module instance metods.
11
- #
12
- # Only one Resent-Bcc field can appear in a header, though it can have multiple
13
- # addresses and groups of addresses.
14
- #
15
- # == Examples:
16
- #
17
- # mail = Mail.new
18
- # mail.resent_bcc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
19
- # mail.resent_bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
20
- # mail[:resent_bcc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
21
- # mail['resent-bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
22
- # mail['Resent-Bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
23
- #
24
- # mail[:resent_bcc].encoded #=> 'Resent-Bcc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
25
- # mail[:resent_bcc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
26
- # mail[:resent_bcc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
27
- # mail[:resent_bcc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
28
- #
29
- require 'mail/fields/common/common_address'
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/common_address_field'
30
4
 
31
5
  module Mail
32
- class ResentBccField < StructuredField
33
-
34
- include Mail::CommonAddress
35
-
36
- FIELD_NAME = 'resent-bcc'
37
- CAPITALIZED_FIELD = 'Resent-Bcc'
38
-
39
- def initialize(value = nil, charset = 'utf-8')
40
- self.charset = charset
41
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
42
- self.parse
43
- self
44
- end
45
-
46
- def encoded
47
- do_encode(CAPITALIZED_FIELD)
48
- end
49
-
50
- def decoded
51
- do_decode
52
- end
53
-
6
+ # = Resent-Bcc Field
7
+ #
8
+ # The Resent-Bcc field inherits resent-bcc StructuredField and handles the
9
+ # Resent-Bcc: header field in the email.
10
+ #
11
+ # Sending resent_bcc to a mail message will instantiate a Mail::Field object that
12
+ # has a ResentBccField as its field type. This includes all Mail::CommonAddress
13
+ # module instance metods.
14
+ #
15
+ # Only one Resent-Bcc field can appear in a header, though it can have multiple
16
+ # addresses and groups of addresses.
17
+ #
18
+ # == Examples:
19
+ #
20
+ # mail = Mail.new
21
+ # mail.resent_bcc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
22
+ # mail.resent_bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
23
+ # mail[:resent_bcc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
24
+ # mail['resent-bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
25
+ # mail['Resent-Bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
26
+ #
27
+ # mail[:resent_bcc].encoded #=> 'Resent-Bcc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
28
+ # mail[:resent_bcc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
29
+ # mail[:resent_bcc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
30
+ # mail[:resent_bcc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
31
+ class ResentBccField < CommonAddressField #:nodoc:
32
+ NAME = 'Resent-Bcc'
54
33
  end
55
34
  end
@@ -1,55 +1,34 @@
1
1
  # encoding: utf-8
2
- #
3
- # = Resent-Cc Field
4
- #
5
- # The Resent-Cc field inherits resent-cc StructuredField and handles the Resent-Cc: header
6
- # field in the email.
7
- #
8
- # Sending resent_cc to a mail message will instantiate a Mail::Field object that
9
- # has a ResentCcField as its field type. This includes all Mail::CommonAddress
10
- # module instance metods.
11
- #
12
- # Only one Resent-Cc field can appear in a header, though it can have multiple
13
- # addresses and groups of addresses.
14
- #
15
- # == Examples:
16
- #
17
- # mail = Mail.new
18
- # mail.resent_cc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
19
- # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
20
- # mail[:resent_cc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
21
- # mail['resent-cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
22
- # mail['Resent-Cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
23
- #
24
- # mail[:resent_cc].encoded #=> 'Resent-Cc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
25
- # mail[:resent_cc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
26
- # mail[:resent_cc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
27
- # mail[:resent_cc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
28
- #
29
- require 'mail/fields/common/common_address'
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/common_address_field'
30
4
 
31
5
  module Mail
32
- class ResentCcField < StructuredField
33
-
34
- include Mail::CommonAddress
35
-
36
- FIELD_NAME = 'resent-cc'
37
- CAPITALIZED_FIELD = 'Resent-Cc'
38
-
39
- def initialize(value = nil, charset = 'utf-8')
40
- self.charset = charset
41
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
42
- self.parse
43
- self
44
- end
45
-
46
- def encoded
47
- do_encode(CAPITALIZED_FIELD)
48
- end
49
-
50
- def decoded
51
- do_decode
52
- end
53
-
6
+ # = Resent-Cc Field
7
+ #
8
+ # The Resent-Cc field inherits resent-cc StructuredField and handles the Resent-Cc: header
9
+ # field in the email.
10
+ #
11
+ # Sending resent_cc to a mail message will instantiate a Mail::Field object that
12
+ # has a ResentCcField as its field type. This includes all Mail::CommonAddress
13
+ # module instance metods.
14
+ #
15
+ # Only one Resent-Cc field can appear in a header, though it can have multiple
16
+ # addresses and groups of addresses.
17
+ #
18
+ # == Examples:
19
+ #
20
+ # mail = Mail.new
21
+ # mail.resent_cc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
22
+ # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
23
+ # mail[:resent_cc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
24
+ # mail['resent-cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
25
+ # mail['Resent-Cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
26
+ #
27
+ # mail[:resent_cc].encoded #=> 'Resent-Cc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
28
+ # mail[:resent_cc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
29
+ # mail[:resent_cc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
30
+ # mail[:resent_cc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
31
+ class ResentCcField < CommonAddressField #:nodoc:
32
+ NAME = 'Resent-Cc'
54
33
  end
55
34
  end