mail 2.7.1 → 2.9.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 (126) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +135 -59
  3. data/lib/mail/attachments_list.rb +5 -6
  4. data/lib/mail/body.rb +51 -74
  5. data/lib/mail/constants.rb +27 -5
  6. data/lib/mail/elements/address.rb +27 -27
  7. data/lib/mail/elements/address_list.rb +1 -1
  8. data/lib/mail/elements/content_disposition_element.rb +1 -1
  9. data/lib/mail/elements/content_location_element.rb +1 -1
  10. data/lib/mail/elements/content_transfer_encoding_element.rb +1 -1
  11. data/lib/mail/elements/content_type_element.rb +8 -4
  12. data/lib/mail/elements/date_time_element.rb +1 -1
  13. data/lib/mail/elements/envelope_from_element.rb +13 -7
  14. data/lib/mail/elements/message_ids_element.rb +14 -5
  15. data/lib/mail/elements/mime_version_element.rb +1 -1
  16. data/lib/mail/elements/phrase_list.rb +7 -2
  17. data/lib/mail/elements/received_element.rb +20 -6
  18. data/lib/mail/encodings/7bit.rb +5 -0
  19. data/lib/mail/encodings/base64.rb +2 -2
  20. data/lib/mail/encodings/quoted_printable.rb +2 -2
  21. data/lib/mail/encodings/unix_to_unix.rb +1 -1
  22. data/lib/mail/encodings.rb +32 -61
  23. data/lib/mail/envelope.rb +11 -14
  24. data/lib/mail/field.rb +100 -86
  25. data/lib/mail/field_list.rb +61 -8
  26. data/lib/mail/fields/bcc_field.rb +33 -52
  27. data/lib/mail/fields/cc_field.rb +27 -49
  28. data/lib/mail/fields/comments_field.rb +26 -37
  29. data/lib/mail/fields/common_address_field.rb +162 -0
  30. data/lib/mail/fields/common_date_field.rb +56 -0
  31. data/lib/mail/fields/common_field.rb +77 -0
  32. data/lib/mail/fields/common_message_id_field.rb +41 -0
  33. data/lib/mail/fields/content_description_field.rb +6 -14
  34. data/lib/mail/fields/content_disposition_field.rb +11 -38
  35. data/lib/mail/fields/content_id_field.rb +23 -51
  36. data/lib/mail/fields/content_location_field.rb +10 -25
  37. data/lib/mail/fields/content_transfer_encoding_field.rb +30 -31
  38. data/lib/mail/fields/content_type_field.rb +49 -75
  39. data/lib/mail/fields/date_field.rb +22 -51
  40. data/lib/mail/fields/from_field.rb +27 -49
  41. data/lib/mail/fields/in_reply_to_field.rb +37 -49
  42. data/lib/mail/fields/keywords_field.rb +17 -31
  43. data/lib/mail/fields/message_id_field.rb +24 -71
  44. data/lib/mail/fields/mime_version_field.rb +18 -30
  45. data/lib/mail/fields/named_structured_field.rb +10 -0
  46. data/lib/mail/fields/named_unstructured_field.rb +10 -0
  47. data/lib/mail/fields/optional_field.rb +5 -7
  48. data/lib/mail/fields/{common/parameter_hash.rb → parameter_hash.rb} +12 -10
  49. data/lib/mail/fields/received_field.rb +42 -57
  50. data/lib/mail/fields/references_field.rb +34 -49
  51. data/lib/mail/fields/reply_to_field.rb +27 -49
  52. data/lib/mail/fields/resent_bcc_field.rb +27 -49
  53. data/lib/mail/fields/resent_cc_field.rb +27 -49
  54. data/lib/mail/fields/resent_date_field.rb +4 -29
  55. data/lib/mail/fields/resent_from_field.rb +27 -49
  56. data/lib/mail/fields/resent_message_id_field.rb +4 -29
  57. data/lib/mail/fields/resent_sender_field.rb +26 -56
  58. data/lib/mail/fields/resent_to_field.rb +27 -49
  59. data/lib/mail/fields/return_path_field.rb +49 -54
  60. data/lib/mail/fields/sender_field.rb +33 -55
  61. data/lib/mail/fields/structured_field.rb +2 -30
  62. data/lib/mail/fields/subject_field.rb +8 -11
  63. data/lib/mail/fields/to_field.rb +27 -49
  64. data/lib/mail/fields/unstructured_field.rb +15 -48
  65. data/lib/mail/fields.rb +9 -0
  66. data/lib/mail/header.rb +69 -110
  67. data/lib/mail/mail.rb +32 -27
  68. data/lib/mail/matchers/attachment_matchers.rb +15 -0
  69. data/lib/mail/message.rb +67 -78
  70. data/lib/mail/multibyte/chars.rb +9 -167
  71. data/lib/mail/multibyte/unicode.rb +1 -1
  72. data/lib/mail/multibyte/utils.rb +26 -43
  73. data/lib/mail/multibyte.rb +1 -11
  74. data/lib/mail/network/delivery_methods/exim.rb +5 -4
  75. data/lib/mail/network/delivery_methods/file_delivery.rb +13 -12
  76. data/lib/mail/network/delivery_methods/logger_delivery.rb +2 -5
  77. data/lib/mail/network/delivery_methods/sendmail.rb +27 -35
  78. data/lib/mail/network/delivery_methods/smtp.rb +81 -30
  79. data/lib/mail/network/delivery_methods/smtp_connection.rb +10 -19
  80. data/lib/mail/network/delivery_methods/test_mailer.rb +8 -6
  81. data/lib/mail/network/retriever_methods/base.rb +13 -13
  82. data/lib/mail/network/retriever_methods/imap.rb +8 -5
  83. data/lib/mail/network/retriever_methods/pop3.rb +22 -22
  84. data/lib/mail/network/retriever_methods/test_retriever.rb +2 -1
  85. data/lib/mail/parsers/address_lists_parser.rb +33073 -33064
  86. data/lib/mail/parsers/address_lists_parser.rl +11 -0
  87. data/lib/mail/parsers/content_disposition_parser.rb +837 -828
  88. data/lib/mail/parsers/content_disposition_parser.rl +11 -0
  89. data/lib/mail/parsers/content_location_parser.rb +773 -764
  90. data/lib/mail/parsers/content_location_parser.rl +12 -1
  91. data/lib/mail/parsers/content_transfer_encoding_parser.rb +477 -468
  92. data/lib/mail/parsers/content_transfer_encoding_parser.rl +11 -0
  93. data/lib/mail/parsers/content_type_parser.rb +974 -965
  94. data/lib/mail/parsers/content_type_parser.rl +11 -0
  95. data/lib/mail/parsers/date_time_parser.rb +841 -832
  96. data/lib/mail/parsers/date_time_parser.rl +11 -0
  97. data/lib/mail/parsers/envelope_from_parser.rb +3627 -3530
  98. data/lib/mail/parsers/envelope_from_parser.rl +11 -0
  99. data/lib/mail/parsers/message_ids_parser.rb +5110 -2800
  100. data/lib/mail/parsers/message_ids_parser.rl +16 -1
  101. data/lib/mail/parsers/mime_version_parser.rb +466 -457
  102. data/lib/mail/parsers/mime_version_parser.rl +11 -0
  103. data/lib/mail/parsers/phrase_lists_parser.rb +839 -830
  104. data/lib/mail/parsers/phrase_lists_parser.rl +12 -1
  105. data/lib/mail/parsers/received_parser.rb +8692 -8683
  106. data/lib/mail/parsers/received_parser.rl +11 -0
  107. data/lib/mail/parsers/rfc5322.rl +28 -13
  108. data/lib/mail/parsers.rb +11 -17
  109. data/lib/mail/part.rb +24 -28
  110. data/lib/mail/parts_list.rb +57 -0
  111. data/lib/mail/smtp_envelope.rb +57 -0
  112. data/lib/mail/utilities.rb +321 -69
  113. data/lib/mail/version.rb +1 -1
  114. data/lib/mail/yaml.rb +30 -0
  115. data/lib/mail.rb +2 -22
  116. metadata +83 -19
  117. data/lib/mail/check_delivery_params.rb +0 -60
  118. data/lib/mail/core_extensions/smtp.rb +0 -28
  119. data/lib/mail/core_extensions/string.rb +0 -17
  120. data/lib/mail/fields/common/address_container.rb +0 -17
  121. data/lib/mail/fields/common/common_address.rb +0 -161
  122. data/lib/mail/fields/common/common_date.rb +0 -36
  123. data/lib/mail/fields/common/common_field.rb +0 -52
  124. data/lib/mail/fields/common/common_message_id.rb +0 -49
  125. data/lib/mail/version_specific/ruby_1_8.rb +0 -163
  126. data/lib/mail/version_specific/ruby_1_9.rb +0 -278
@@ -1,35 +1,24 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- #
5
- #
3
+ require 'mail/utilities'
4
+
6
5
  module Mail
7
- class MimeVersionField < StructuredField
8
-
9
- FIELD_NAME = 'mime-version'
10
- CAPITALIZED_FIELD = 'Mime-Version'
11
-
12
- def initialize(value = nil, charset = 'utf-8')
13
- self.charset = charset
14
- if Utilities.blank?(value)
15
- value = '1.0'
16
- end
17
- super(CAPITALIZED_FIELD, value, charset)
18
- self.parse
19
- self
20
-
21
- end
22
-
23
- def parse(val = value)
24
- unless Utilities.blank?(val)
25
- @element = Mail::MimeVersionElement.new(val)
26
- end
27
- end
28
-
6
+ class MimeVersionField < NamedStructuredField #:nodoc:
7
+ NAME = 'MIME-Version'
8
+
9
+ def self.singular?
10
+ true
11
+ end
12
+
13
+ def initialize(value = nil, charset = nil)
14
+ value = '1.0' if Utilities.blank?(value)
15
+ super value, charset
16
+ end
17
+
29
18
  def element
30
19
  @element ||= Mail::MimeVersionElement.new(value)
31
20
  end
32
-
21
+
33
22
  def version
34
23
  "#{element.major}.#{element.minor}"
35
24
  end
@@ -41,14 +30,13 @@ module Mail
41
30
  def minor
42
31
  element.minor.to_i
43
32
  end
44
-
33
+
45
34
  def encoded
46
- "#{CAPITALIZED_FIELD}: #{version}\r\n"
35
+ "#{name}: #{version}\r\n"
47
36
  end
48
-
37
+
49
38
  def decoded
50
39
  version
51
40
  end
52
-
53
41
  end
54
42
  end
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ module Mail
5
+ class NamedStructuredField < StructuredField #:nodoc:
6
+ def initialize(value = nil, charset = nil)
7
+ super self.class::NAME, value, charset
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ module Mail
5
+ class NamedUnstructuredField < UnstructuredField #:nodoc:
6
+ def initialize(value = nil, charset = nil)
7
+ super self.class::NAME, value, charset
8
+ end
9
+ end
10
+ end
@@ -1,14 +1,12 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # The field names of any optional-field MUST NOT be identical to any
5
- # field name specified elsewhere in this standard.
6
- #
7
- # optional-field = field-name ":" unstructured CRLF
8
- require 'mail/fields/unstructured_field'
9
3
 
10
4
  module Mail
11
- class OptionalField < UnstructuredField
5
+ # The field names of any optional-field MUST NOT be identical to any
6
+ # field name specified elsewhere in this standard.
7
+ #
8
+ # optional-field = field-name ":" unstructured CRLF
9
+ class OptionalField < UnstructuredField #:nodoc:
12
10
  private
13
11
  def do_encode
14
12
  "#{wrapped_value}\r\n"
@@ -1,31 +1,33 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- module Mail
3
+ require 'mail/constants'
4
+ require 'mail/indifferent_hash'
5
+ require 'mail/encodings'
4
6
 
7
+ module Mail
5
8
  # ParameterHash is an intelligent Hash that allows you to add
6
9
  # parameter values including the MIME extension paramaters that
7
10
  # have the name*0="blah", name*1="bleh" keys, and will just return
8
11
  # a single key called name="blahbleh" and do any required un-encoding
9
12
  # to make that happen
10
- # Parameters are defined in RFC2045, split keys are in RFC2231
11
-
12
- class ParameterHash < IndifferentHash
13
-
14
- include Mail::Utilities
15
-
13
+ #
14
+ # Parameters are defined in RFC2045. Split keys are in RFC2231.
15
+ class ParameterHash < IndifferentHash #:nodoc:
16
16
  def [](key_name)
17
17
  key_pattern = Regexp.escape(key_name.to_s)
18
18
  pairs = []
19
19
  exact = nil
20
+
20
21
  each do |k,v|
21
22
  if k =~ /^#{key_pattern}(\*|$)/i
22
- if $1 == ASTERISK
23
+ if $1 == Constants::ASTERISK
23
24
  pairs << [k, v]
24
25
  else
25
26
  exact = k
26
27
  end
27
28
  end
28
29
  end
30
+
29
31
  if pairs.empty? # Just dealing with a single value pair
30
32
  super(exact || key_name)
31
33
  else # Dealing with a multiple value pair or a single encoded value pair
@@ -46,13 +48,13 @@ module Mail
46
48
  value = Mail::Encodings.param_encode(value)
47
49
  key_name = "#{key_name}*"
48
50
  end
49
- %Q{#{key_name}=#{quote_token(value)}}
51
+ %Q{#{key_name}=#{Utilities.quote_token(value)}}
50
52
  end.join(";\r\n\s")
51
53
  end
52
54
 
53
55
  def decoded
54
56
  map.sort_by { |a| a.first.to_s }.map! do |key_name, value|
55
- %Q{#{key_name}=#{quote_token(value)}}
57
+ %Q{#{key_name}=#{Utilities.quote_token(value)}}
56
58
  end.join("; ")
57
59
  end
58
60
  end
@@ -1,76 +1,61 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # trace = [return]
5
- # 1*received
6
- #
7
- # return = "Return-Path:" path CRLF
8
- #
9
- # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) /
10
- # obs-path
11
- #
12
- # received = "Received:" name-val-list ";" date-time CRLF
13
- #
14
- # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)]
15
- #
16
- # name-val-pair = item-name CFWS item-value
17
- #
18
- # item-name = ALPHA *(["-"] (ALPHA / DIGIT))
19
- #
20
- # item-value = 1*angle-addr / addr-spec /
21
- # atom / domain / msg-id
22
- #
3
+
23
4
  module Mail
24
- class ReceivedField < StructuredField
25
-
26
- FIELD_NAME = 'received'
27
- CAPITALIZED_FIELD = 'Received'
28
-
29
- def initialize(value = nil, charset = 'utf-8')
30
- self.charset = charset
31
- super(CAPITALIZED_FIELD, value, charset)
32
- self.parse
33
- self
5
+ # trace = [return]
6
+ # 1*received
7
+ #
8
+ # return = "Return-Path:" path CRLF
9
+ #
10
+ # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) /
11
+ # obs-path
12
+ #
13
+ # received = "Received:" name-val-list ";" date-time CRLF
14
+ #
15
+ # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)]
16
+ #
17
+ # name-val-pair = item-name CFWS item-value
18
+ #
19
+ # item-name = ALPHA *(["-"] (ALPHA / DIGIT))
20
+ #
21
+ # item-value = 1*angle-addr / addr-spec /
22
+ # atom / domain / msg-id
23
+ class ReceivedField < NamedStructuredField #:nodoc:
24
+ NAME = 'Received'
34
25
 
35
- end
36
-
37
- def parse(val = value)
38
- unless Utilities.blank?(val)
39
- @element = Mail::ReceivedElement.new(val)
40
- end
41
- end
42
-
43
26
  def element
44
27
  @element ||= Mail::ReceivedElement.new(value)
45
28
  end
46
-
29
+
47
30
  def date_time
48
- @datetime ||= ::DateTime.parse("#{element.date_time}")
31
+ @datetime ||= element.date_time
49
32
  end
50
33
 
51
34
  def info
52
35
  element.info
53
36
  end
54
-
37
+
55
38
  def formatted_date
56
- date_time.strftime("%a, %d %b %Y %H:%M:%S ") + date_time.zone.delete(':')
57
- end
58
-
59
- def encoded
60
- if Utilities.blank?(value)
61
- "#{CAPITALIZED_FIELD}: \r\n"
62
- else
63
- "#{CAPITALIZED_FIELD}: #{info}; #{formatted_date}\r\n"
39
+ if date_time.respond_to? :strftime and date_time.respond_to? :zone
40
+ date_time.strftime("%a, %d %b %Y %H:%M:%S ") + date_time.zone.delete(':')
64
41
  end
65
42
  end
66
-
67
- def decoded
68
- if Utilities.blank?(value)
69
- ""
70
- else
71
- "#{info}; #{formatted_date}"
43
+
44
+ private
45
+ def do_encode
46
+ if Utilities.blank?(value)
47
+ "#{name}: \r\n"
48
+ else
49
+ "#{name}: #{info}; #{formatted_date}\r\n"
50
+ end
51
+ end
52
+
53
+ def do_decode
54
+ if Utilities.blank?(value)
55
+ ""
56
+ else
57
+ "#{info}; #{formatted_date}"
58
+ end
72
59
  end
73
- end
74
-
75
60
  end
76
61
  end
@@ -1,57 +1,42 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # = References Field
5
- #
6
- # The References field inherits references StructuredField and handles the References: header
7
- # field in the email.
8
- #
9
- # Sending references to a mail message will instantiate a Mail::Field object that
10
- # has a ReferencesField as its field type. This includes all Mail::CommonAddress
11
- # module instance metods.
12
- #
13
- # Note that, the #message_ids method will return an array of message IDs without the
14
- # enclosing angle brackets which per RFC are not syntactically part of the message id.
15
- #
16
- # Only one References field can appear in a header, though it can have multiple
17
- # Message IDs.
18
- #
19
- # == Examples:
20
- #
21
- # mail = Mail.new
22
- # mail.references = '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
23
- # mail.references #=> '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
24
- # mail[:references] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
25
- # mail['references'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
26
- # mail['References'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
27
- #
28
- # mail[:references].message_ids #=> ['F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom']
29
- #
30
- require 'mail/fields/common/common_message_id'
31
3
 
32
4
  module Mail
33
- class ReferencesField < StructuredField
34
-
35
- include CommonMessageId
36
-
37
- FIELD_NAME = 'references'
38
- CAPITALIZED_FIELD = 'References'
39
-
40
- def initialize(value = nil, charset = 'utf-8')
41
- self.charset = charset
42
- value = value.join("\r\n\s") if value.is_a?(Array)
43
- super(CAPITALIZED_FIELD, value, charset)
44
- self.parse
45
- self
46
- end
47
-
48
- def encoded
49
- do_encode(CAPITALIZED_FIELD)
5
+ # = References Field
6
+ #
7
+ # The References field inherits references StructuredField and handles the References: header
8
+ # field in the email.
9
+ #
10
+ # Sending references to a mail message will instantiate a Mail::Field object that
11
+ # has a ReferencesField as its field type. This includes all Mail::CommonAddress
12
+ # module instance metods.
13
+ #
14
+ # Note that, the #message_ids method will return an array of message IDs without the
15
+ # enclosing angle brackets which per RFC are not syntactically part of the message id.
16
+ #
17
+ # Only one References field can appear in a header, though it can have multiple
18
+ # Message IDs.
19
+ #
20
+ # == Examples:
21
+ #
22
+ # mail = Mail.new
23
+ # mail.references = '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
24
+ # mail.references #=> '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
25
+ # mail[:references] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
26
+ # mail['references'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
27
+ # mail['References'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
28
+ #
29
+ # mail[:references].message_ids #=> ['F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom']
30
+ class ReferencesField < CommonMessageIdField #:nodoc:
31
+ NAME = 'References'
32
+
33
+ def self.singular?
34
+ true
50
35
  end
51
-
52
- def decoded
53
- do_decode
36
+
37
+ def initialize(value = nil, charset = nil)
38
+ value = value.join("\r\n\s") if value.is_a?(Array)
39
+ super value, charset
54
40
  end
55
-
56
41
  end
57
42
  end
@@ -1,55 +1,33 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # = Reply-To Field
5
- #
6
- # The Reply-To field inherits reply-to StructuredField and handles the Reply-To: header
7
- # field in the email.
8
- #
9
- # Sending reply_to to a mail message will instantiate a Mail::Field object that
10
- # has a ReplyToField as its field type. This includes all Mail::CommonAddress
11
- # module instance metods.
12
- #
13
- # Only one Reply-To field can appear in a header, though it can have multiple
14
- # addresses and groups of addresses.
15
- #
16
- # == Examples:
17
- #
18
- # mail = Mail.new
19
- # mail.reply_to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
20
- # mail.reply_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
21
- # mail[:reply_to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
22
- # mail['reply-to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
23
- # mail['Reply-To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
24
- #
25
- # mail[:reply_to].encoded #=> 'Reply-To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
26
- # mail[:reply_to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
27
- # mail[:reply_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
28
- # mail[:reply_to].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
29
- #
30
- require 'mail/fields/common/common_address'
31
3
 
32
4
  module Mail
33
- class ReplyToField < StructuredField
34
-
35
- include Mail::CommonAddress
36
-
37
- FIELD_NAME = 'reply-to'
38
- CAPITALIZED_FIELD = 'Reply-To'
39
-
40
- def initialize(value = nil, charset = 'utf-8')
41
- self.charset = charset
42
- super(CAPITALIZED_FIELD, value, charset)
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
-
5
+ # = Reply-To Field
6
+ #
7
+ # The Reply-To field inherits reply-to StructuredField and handles the Reply-To: header
8
+ # field in the email.
9
+ #
10
+ # Sending reply_to to a mail message will instantiate a Mail::Field object that
11
+ # has a ReplyToField as its field type. This includes all Mail::CommonAddress
12
+ # module instance metods.
13
+ #
14
+ # Only one Reply-To field can appear in a header, though it can have multiple
15
+ # addresses and groups of addresses.
16
+ #
17
+ # == Examples:
18
+ #
19
+ # mail = Mail.new
20
+ # mail.reply_to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
21
+ # mail.reply_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
22
+ # mail[:reply_to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
23
+ # mail['reply-to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
24
+ # mail['Reply-To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
25
+ #
26
+ # mail[:reply_to].encoded #=> 'Reply-To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
27
+ # mail[:reply_to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
28
+ # mail[:reply_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
29
+ # mail[:reply_to].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
30
+ class ReplyToField < CommonAddressField #:nodoc:
31
+ NAME = 'Reply-To'
54
32
  end
55
33
  end
@@ -1,55 +1,33 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # = Resent-Bcc Field
5
- #
6
- # The Resent-Bcc field inherits resent-bcc StructuredField and handles the
7
- # Resent-Bcc: header field in the email.
8
- #
9
- # Sending resent_bcc to a mail message will instantiate a Mail::Field object that
10
- # has a ResentBccField as its field type. This includes all Mail::CommonAddress
11
- # module instance metods.
12
- #
13
- # Only one Resent-Bcc field can appear in a header, though it can have multiple
14
- # addresses and groups of addresses.
15
- #
16
- # == Examples:
17
- #
18
- # mail = Mail.new
19
- # mail.resent_bcc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
20
- # mail.resent_bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
21
- # mail[:resent_bcc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
22
- # mail['resent-bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
23
- # mail['Resent-Bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
24
- #
25
- # mail[:resent_bcc].encoded #=> 'Resent-Bcc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
26
- # mail[:resent_bcc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
27
- # mail[:resent_bcc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
28
- # mail[:resent_bcc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
29
- #
30
- require 'mail/fields/common/common_address'
31
3
 
32
4
  module Mail
33
- class ResentBccField < StructuredField
34
-
35
- include Mail::CommonAddress
36
-
37
- FIELD_NAME = 'resent-bcc'
38
- CAPITALIZED_FIELD = 'Resent-Bcc'
39
-
40
- def initialize(value = nil, charset = 'utf-8')
41
- self.charset = charset
42
- super(CAPITALIZED_FIELD, value, charset)
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
-
5
+ # = Resent-Bcc Field
6
+ #
7
+ # The Resent-Bcc field inherits resent-bcc StructuredField and handles the
8
+ # Resent-Bcc: header field in the email.
9
+ #
10
+ # Sending resent_bcc to a mail message will instantiate a Mail::Field object that
11
+ # has a ResentBccField as its field type. This includes all Mail::CommonAddress
12
+ # module instance metods.
13
+ #
14
+ # Only one Resent-Bcc field can appear in a header, though it can have multiple
15
+ # addresses and groups of addresses.
16
+ #
17
+ # == Examples:
18
+ #
19
+ # mail = Mail.new
20
+ # mail.resent_bcc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
21
+ # mail.resent_bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
22
+ # mail[:resent_bcc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
23
+ # mail['resent-bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
24
+ # mail['Resent-Bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
25
+ #
26
+ # mail[:resent_bcc].encoded #=> 'Resent-Bcc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
27
+ # mail[:resent_bcc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
28
+ # mail[:resent_bcc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
29
+ # mail[:resent_bcc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
30
+ class ResentBccField < CommonAddressField #:nodoc:
31
+ NAME = 'Resent-Bcc'
54
32
  end
55
33
  end
@@ -1,55 +1,33 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # = Resent-Cc Field
5
- #
6
- # The Resent-Cc field inherits resent-cc StructuredField and handles the Resent-Cc: header
7
- # field in the email.
8
- #
9
- # Sending resent_cc to a mail message will instantiate a Mail::Field object that
10
- # has a ResentCcField as its field type. This includes all Mail::CommonAddress
11
- # module instance metods.
12
- #
13
- # Only one Resent-Cc field can appear in a header, though it can have multiple
14
- # addresses and groups of addresses.
15
- #
16
- # == Examples:
17
- #
18
- # mail = Mail.new
19
- # mail.resent_cc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
20
- # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
21
- # mail[:resent_cc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
22
- # mail['resent-cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
23
- # mail['Resent-Cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
24
- #
25
- # mail[:resent_cc].encoded #=> 'Resent-Cc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
26
- # mail[:resent_cc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
27
- # mail[:resent_cc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
28
- # mail[:resent_cc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
29
- #
30
- require 'mail/fields/common/common_address'
31
3
 
32
4
  module Mail
33
- class ResentCcField < StructuredField
34
-
35
- include Mail::CommonAddress
36
-
37
- FIELD_NAME = 'resent-cc'
38
- CAPITALIZED_FIELD = 'Resent-Cc'
39
-
40
- def initialize(value = nil, charset = 'utf-8')
41
- self.charset = charset
42
- super(CAPITALIZED_FIELD, value, charset)
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
-
5
+ # = Resent-Cc Field
6
+ #
7
+ # The Resent-Cc field inherits resent-cc StructuredField and handles the Resent-Cc: header
8
+ # field in the email.
9
+ #
10
+ # Sending resent_cc to a mail message will instantiate a Mail::Field object that
11
+ # has a ResentCcField as its field type. This includes all Mail::CommonAddress
12
+ # module instance metods.
13
+ #
14
+ # Only one Resent-Cc field can appear in a header, though it can have multiple
15
+ # addresses and groups of addresses.
16
+ #
17
+ # == Examples:
18
+ #
19
+ # mail = Mail.new
20
+ # mail.resent_cc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
21
+ # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
22
+ # mail[:resent_cc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
23
+ # mail['resent-cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
24
+ # mail['Resent-Cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
25
+ #
26
+ # mail[:resent_cc].encoded #=> 'Resent-Cc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
27
+ # mail[:resent_cc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
28
+ # mail[:resent_cc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
29
+ # mail[:resent_cc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
30
+ class ResentCcField < CommonAddressField #:nodoc:
31
+ NAME = 'Resent-Cc'
54
32
  end
55
33
  end
@@ -1,35 +1,10 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # resent-date = "Resent-Date:" date-time CRLF
5
- require 'mail/fields/common/common_date'
6
3
 
7
4
  module Mail
8
- class ResentDateField < StructuredField
9
-
10
- include Mail::CommonDate
11
-
12
- FIELD_NAME = 'resent-date'
13
- CAPITALIZED_FIELD = 'Resent-Date'
14
-
15
- def initialize(value = nil, charset = 'utf-8')
16
- self.charset = charset
17
- if Utilities.blank?(value)
18
- value = ::DateTime.now.strftime('%a, %d %b %Y %H:%M:%S %z')
19
- else
20
- value = ::DateTime.parse(value.to_s).strftime('%a, %d %b %Y %H:%M:%S %z')
21
- end
22
- super(CAPITALIZED_FIELD, value, charset)
23
- self
24
- end
25
-
26
- def encoded
27
- do_encode(CAPITALIZED_FIELD)
28
- end
29
-
30
- def decoded
31
- do_decode
32
- end
33
-
5
+ #
6
+ # resent-date = "Resent-Date:" date-time CRLF
7
+ class ResentDateField < CommonDateField #:nodoc:
8
+ NAME = 'Resent-Date'
34
9
  end
35
10
  end