mail 2.6.4 → 2.9.0

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 (180) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +208 -156
  3. data/lib/mail/attachments_list.rb +13 -10
  4. data/lib/mail/body.rb +96 -107
  5. data/lib/mail/configuration.rb +2 -0
  6. data/lib/mail/constants.rb +27 -5
  7. data/lib/mail/elements/address.rb +61 -50
  8. data/lib/mail/elements/address_list.rb +11 -19
  9. data/lib/mail/elements/content_disposition_element.rb +9 -16
  10. data/lib/mail/elements/content_location_element.rb +6 -11
  11. data/lib/mail/elements/content_transfer_encoding_element.rb +6 -11
  12. data/lib/mail/elements/content_type_element.rb +16 -23
  13. data/lib/mail/elements/date_time_element.rb +7 -15
  14. data/lib/mail/elements/envelope_from_element.rb +22 -23
  15. data/lib/mail/elements/message_ids_element.rb +18 -13
  16. data/lib/mail/elements/mime_version_element.rb +7 -15
  17. data/lib/mail/elements/phrase_list.rb +12 -10
  18. data/lib/mail/elements/received_element.rb +27 -19
  19. data/lib/mail/encodings/7bit.rb +9 -14
  20. data/lib/mail/encodings/8bit.rb +2 -21
  21. data/lib/mail/encodings/base64.rb +11 -12
  22. data/lib/mail/encodings/binary.rb +3 -22
  23. data/lib/mail/encodings/identity.rb +24 -0
  24. data/lib/mail/encodings/quoted_printable.rb +6 -6
  25. data/lib/mail/encodings/transfer_encoding.rb +38 -29
  26. data/lib/mail/encodings/unix_to_unix.rb +4 -2
  27. data/lib/mail/encodings.rb +83 -56
  28. data/lib/mail/envelope.rb +11 -14
  29. data/lib/mail/field.rb +181 -130
  30. data/lib/mail/field_list.rb +61 -8
  31. data/lib/mail/fields/bcc_field.rb +33 -52
  32. data/lib/mail/fields/cc_field.rb +27 -49
  33. data/lib/mail/fields/comments_field.rb +26 -37
  34. data/lib/mail/fields/common_address_field.rb +162 -0
  35. data/lib/mail/fields/common_date_field.rb +56 -0
  36. data/lib/mail/fields/common_field.rb +77 -0
  37. data/lib/mail/fields/common_message_id_field.rb +41 -0
  38. data/lib/mail/fields/content_description_field.rb +6 -14
  39. data/lib/mail/fields/content_disposition_field.rb +11 -38
  40. data/lib/mail/fields/content_id_field.rb +23 -51
  41. data/lib/mail/fields/content_location_field.rb +10 -25
  42. data/lib/mail/fields/content_transfer_encoding_field.rb +30 -31
  43. data/lib/mail/fields/content_type_field.rb +53 -84
  44. data/lib/mail/fields/date_field.rb +22 -52
  45. data/lib/mail/fields/from_field.rb +27 -49
  46. data/lib/mail/fields/in_reply_to_field.rb +37 -49
  47. data/lib/mail/fields/keywords_field.rb +17 -31
  48. data/lib/mail/fields/message_id_field.rb +24 -71
  49. data/lib/mail/fields/mime_version_field.rb +18 -30
  50. data/lib/mail/fields/named_structured_field.rb +10 -0
  51. data/lib/mail/fields/named_unstructured_field.rb +10 -0
  52. data/lib/mail/fields/optional_field.rb +9 -8
  53. data/lib/mail/fields/{common/parameter_hash.rb → parameter_hash.rb} +13 -11
  54. data/lib/mail/fields/received_field.rb +42 -57
  55. data/lib/mail/fields/references_field.rb +34 -49
  56. data/lib/mail/fields/reply_to_field.rb +27 -49
  57. data/lib/mail/fields/resent_bcc_field.rb +27 -49
  58. data/lib/mail/fields/resent_cc_field.rb +27 -49
  59. data/lib/mail/fields/resent_date_field.rb +4 -30
  60. data/lib/mail/fields/resent_from_field.rb +27 -49
  61. data/lib/mail/fields/resent_message_id_field.rb +4 -29
  62. data/lib/mail/fields/resent_sender_field.rb +26 -56
  63. data/lib/mail/fields/resent_to_field.rb +27 -49
  64. data/lib/mail/fields/return_path_field.rb +49 -54
  65. data/lib/mail/fields/sender_field.rb +33 -55
  66. data/lib/mail/fields/structured_field.rb +2 -30
  67. data/lib/mail/fields/subject_field.rb +8 -11
  68. data/lib/mail/fields/to_field.rb +27 -49
  69. data/lib/mail/fields/unstructured_field.rb +31 -47
  70. data/lib/mail/fields.rb +9 -0
  71. data/lib/mail/header.rb +71 -110
  72. data/lib/mail/mail.rb +34 -37
  73. data/lib/mail/matchers/attachment_matchers.rb +15 -0
  74. data/lib/mail/matchers/has_sent_mail.rb +21 -1
  75. data/lib/mail/message.rb +126 -127
  76. data/lib/mail/multibyte/chars.rb +24 -181
  77. data/lib/mail/multibyte/unicode.rb +11 -11
  78. data/lib/mail/multibyte/utils.rb +26 -43
  79. data/lib/mail/multibyte.rb +55 -16
  80. data/lib/mail/network/delivery_methods/exim.rb +8 -11
  81. data/lib/mail/network/delivery_methods/file_delivery.rb +15 -18
  82. data/lib/mail/network/delivery_methods/logger_delivery.rb +34 -0
  83. data/lib/mail/network/delivery_methods/sendmail.rb +32 -35
  84. data/lib/mail/network/delivery_methods/smtp.rb +125 -68
  85. data/lib/mail/network/delivery_methods/smtp_connection.rb +11 -16
  86. data/lib/mail/network/delivery_methods/test_mailer.rb +12 -13
  87. data/lib/mail/network/retriever_methods/base.rb +13 -13
  88. data/lib/mail/network/retriever_methods/imap.rb +25 -9
  89. data/lib/mail/network/retriever_methods/pop3.rb +25 -23
  90. data/lib/mail/network/retriever_methods/test_retriever.rb +3 -2
  91. data/lib/mail/network.rb +1 -0
  92. data/lib/mail/parser_tools.rb +15 -0
  93. data/lib/mail/parsers/address_lists_parser.rb +33228 -116
  94. data/lib/mail/parsers/address_lists_parser.rl +183 -0
  95. data/lib/mail/parsers/content_disposition_parser.rb +885 -49
  96. data/lib/mail/parsers/content_disposition_parser.rl +93 -0
  97. data/lib/mail/parsers/content_location_parser.rb +812 -23
  98. data/lib/mail/parsers/content_location_parser.rl +82 -0
  99. data/lib/mail/parsers/content_transfer_encoding_parser.rb +512 -21
  100. data/lib/mail/parsers/content_transfer_encoding_parser.rl +75 -0
  101. data/lib/mail/parsers/content_type_parser.rb +1039 -55
  102. data/lib/mail/parsers/content_type_parser.rl +94 -0
  103. data/lib/mail/parsers/date_time_parser.rb +880 -25
  104. data/lib/mail/parsers/date_time_parser.rl +73 -0
  105. data/lib/mail/parsers/envelope_from_parser.rb +3672 -40
  106. data/lib/mail/parsers/envelope_from_parser.rl +93 -0
  107. data/lib/mail/parsers/message_ids_parser.rb +5149 -25
  108. data/lib/mail/parsers/message_ids_parser.rl +97 -0
  109. data/lib/mail/parsers/mime_version_parser.rb +500 -26
  110. data/lib/mail/parsers/mime_version_parser.rl +72 -0
  111. data/lib/mail/parsers/phrase_lists_parser.rb +873 -22
  112. data/lib/mail/parsers/phrase_lists_parser.rl +94 -0
  113. data/lib/mail/parsers/received_parser.rb +8779 -43
  114. data/lib/mail/parsers/received_parser.rl +95 -0
  115. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +13 -0
  116. data/lib/mail/parsers/rfc2045_content_type.rl +25 -0
  117. data/lib/mail/parsers/rfc2045_mime.rl +16 -0
  118. data/lib/mail/parsers/rfc2183_content_disposition.rl +15 -0
  119. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  120. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +22 -0
  121. data/lib/mail/parsers/rfc5322.rl +74 -0
  122. data/lib/mail/parsers/rfc5322_address.rl +72 -0
  123. data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +8 -1
  124. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
  125. data/lib/mail/parsers.rb +11 -25
  126. data/lib/mail/part.rb +25 -29
  127. data/lib/mail/parts_list.rb +62 -6
  128. data/lib/mail/smtp_envelope.rb +57 -0
  129. data/lib/mail/utilities.rb +361 -74
  130. data/lib/mail/version.rb +2 -2
  131. data/lib/mail/yaml.rb +30 -0
  132. data/lib/mail.rb +4 -37
  133. metadata +125 -67
  134. data/CHANGELOG.rdoc +0 -787
  135. data/CONTRIBUTING.md +0 -60
  136. data/Dependencies.txt +0 -2
  137. data/Gemfile +0 -11
  138. data/Rakefile +0 -29
  139. data/TODO.rdoc +0 -9
  140. data/lib/mail/check_delivery_params.rb +0 -21
  141. data/lib/mail/core_extensions/smtp.rb +0 -25
  142. data/lib/mail/core_extensions/string/access.rb +0 -146
  143. data/lib/mail/core_extensions/string/multibyte.rb +0 -79
  144. data/lib/mail/core_extensions/string.rb +0 -21
  145. data/lib/mail/fields/common/address_container.rb +0 -17
  146. data/lib/mail/fields/common/common_address.rb +0 -136
  147. data/lib/mail/fields/common/common_date.rb +0 -36
  148. data/lib/mail/fields/common/common_field.rb +0 -61
  149. data/lib/mail/fields/common/common_message_id.rb +0 -49
  150. data/lib/mail/multibyte/exceptions.rb +0 -9
  151. data/lib/mail/parsers/ragel/common.rl +0 -185
  152. data/lib/mail/parsers/ragel/parser_info.rb +0 -61
  153. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
  154. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
  155. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
  156. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
  157. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
  158. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
  159. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
  160. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
  161. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
  162. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
  163. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
  164. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
  165. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
  166. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
  167. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
  168. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
  169. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
  170. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
  171. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
  172. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
  173. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
  174. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
  175. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
  176. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
  177. data/lib/mail/parsers/ragel/ruby.rb +0 -40
  178. data/lib/mail/parsers/ragel.rb +0 -18
  179. data/lib/mail/version_specific/ruby_1_8.rb +0 -126
  180. data/lib/mail/version_specific/ruby_1_9.rb +0 -223
@@ -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, strip_field(FIELD_NAME, 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,36 +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 = strip_field(FIELD_NAME, value)
21
- value = ::DateTime.parse(value.to_s).strftime('%a, %d %b %Y %H:%M:%S %z')
22
- end
23
- super(CAPITALIZED_FIELD, value, charset)
24
- self
25
- end
26
-
27
- def encoded
28
- do_encode(CAPITALIZED_FIELD)
29
- end
30
-
31
- def decoded
32
- do_decode
33
- end
34
-
5
+ #
6
+ # resent-date = "Resent-Date:" date-time CRLF
7
+ class ResentDateField < CommonDateField #:nodoc:
8
+ NAME = 'Resent-Date'
35
9
  end
36
10
  end
@@ -1,55 +1,33 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # = Resent-From Field
5
- #
6
- # The Resent-From field inherits resent-from StructuredField and handles the Resent-From: header
7
- # field in the email.
8
- #
9
- # Sending resent_from to a mail message will instantiate a Mail::Field object that
10
- # has a ResentFromField as its field type. This includes all Mail::CommonAddress
11
- # module instance metods.
12
- #
13
- # Only one Resent-From 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_from = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
20
- # mail.resent_from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
21
- # mail[:resent_from] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
22
- # mail['resent-from'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
23
- # mail['Resent-From'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
24
- #
25
- # mail[:resent_from].encoded #=> 'Resent-From: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
26
- # mail[:resent_from].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
27
- # mail[:resent_from].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
28
- # mail[:resent_from].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 ResentFromField < StructuredField
34
-
35
- include Mail::CommonAddress
36
-
37
- FIELD_NAME = 'resent-from'
38
- CAPITALIZED_FIELD = 'Resent-From'
39
-
40
- def initialize(value = nil, charset = 'utf-8')
41
- self.charset = charset
42
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, 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-From Field
6
+ #
7
+ # The Resent-From field inherits resent-from StructuredField and handles the Resent-From: header
8
+ # field in the email.
9
+ #
10
+ # Sending resent_from to a mail message will instantiate a Mail::Field object that
11
+ # has a ResentFromField as its field type. This includes all Mail::CommonAddress
12
+ # module instance metods.
13
+ #
14
+ # Only one Resent-From 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_from = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
21
+ # mail.resent_from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
22
+ # mail[:resent_from] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
23
+ # mail['resent-from'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
24
+ # mail['Resent-From'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
25
+ #
26
+ # mail[:resent_from].encoded #=> 'Resent-From: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
27
+ # mail[:resent_from].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
28
+ # mail[:resent_from].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
29
+ # mail[:resent_from].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
30
+ class ResentFromField < CommonAddressField #:nodoc:
31
+ NAME = 'Resent-From'
54
32
  end
55
33
  end
@@ -1,35 +1,10 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # resent-msg-id = "Resent-Message-ID:" msg-id CRLF
5
- require 'mail/fields/common/common_message_id'
6
3
 
7
4
  module Mail
8
- class ResentMessageIdField < StructuredField
9
-
10
- include CommonMessageId
11
-
12
- FIELD_NAME = 'resent-message-id'
13
- CAPITALIZED_FIELD = 'Resent-Message-ID'
14
-
15
- def initialize(value = nil, charset = 'utf-8')
16
- self.charset = charset
17
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
18
- self.parse
19
- self
20
- end
21
-
22
- def name
23
- 'Resent-Message-ID'
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-msg-id = "Resent-Message-ID:" msg-id CRLF
7
+ class ResentMessageIdField < CommonMessageIdField #:nodoc:
8
+ NAME = 'Resent-Message-ID'
34
9
  end
35
10
  end
@@ -1,62 +1,32 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # = Resent-Sender Field
5
- #
6
- # The Resent-Sender field inherits resent-sender StructuredField and handles the Resent-Sender: header
7
- # field in the email.
8
- #
9
- # Sending resent_sender to a mail message will instantiate a Mail::Field object that
10
- # has a ResentSenderField as its field type. This includes all Mail::CommonAddress
11
- # module instance metods.
12
- #
13
- # Only one Resent-Sender 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_sender = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
20
- # mail.resent_sender #=> ['mikel@test.lindsaar.net']
21
- # mail[:resent_sender] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
22
- # mail['resent-sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
23
- # mail['Resent-Sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
24
- #
25
- # mail.resent_sender.to_s #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
26
- # mail.resent_sender.addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
27
- # mail.resent_sender.formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
28
- #
29
- require 'mail/fields/common/common_address'
30
3
 
31
4
  module Mail
32
- class ResentSenderField < StructuredField
33
-
34
- include Mail::CommonAddress
35
-
36
- FIELD_NAME = 'resent-sender'
37
- CAPITALIZED_FIELD = 'Resent-Sender'
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
43
- end
44
-
45
- def addresses
46
- [address.address]
47
- end
48
-
49
- def address
50
- address_list.addresses.first
51
- end
52
-
53
- def encoded
54
- do_encode(CAPITALIZED_FIELD)
55
- end
56
-
57
- def decoded
58
- do_decode
59
- end
60
-
5
+ # = Resent-Sender Field
6
+ #
7
+ # The Resent-Sender field inherits resent-sender StructuredField and handles the Resent-Sender: header
8
+ # field in the email.
9
+ #
10
+ # Sending resent_sender to a mail message will instantiate a Mail::Field object that
11
+ # has a ResentSenderField as its field type. This includes all Mail::CommonAddress
12
+ # module instance metods.
13
+ #
14
+ # Only one Resent-Sender 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_sender = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
21
+ # mail.resent_sender #=> ['mikel@test.lindsaar.net']
22
+ # mail[:resent_sender] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
23
+ # mail['resent-sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
24
+ # mail['Resent-Sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
25
+ #
26
+ # mail.resent_sender.to_s #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
27
+ # mail.resent_sender.addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
28
+ # mail.resent_sender.formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
29
+ class ResentSenderField < CommonAddressField #:nodoc:
30
+ NAME = 'Resent-Sender'
61
31
  end
62
32
  end
@@ -1,55 +1,33 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # = Resent-To Field
5
- #
6
- # The Resent-To field inherits resent-to StructuredField and handles the Resent-To: header
7
- # field in the email.
8
- #
9
- # Sending resent_to to a mail message will instantiate a Mail::Field object that
10
- # has a ResentToField as its field type. This includes all Mail::CommonAddress
11
- # module instance metods.
12
- #
13
- # Only one Resent-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.resent_to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
20
- # mail.resent_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
21
- # mail[:resent_to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
22
- # mail['resent-to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
23
- # mail['Resent-To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
24
- #
25
- # mail[:resent_to].encoded #=> 'Resent-To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
26
- # mail[:resent_to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
27
- # mail[:resent_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
28
- # mail[:resent_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 ResentToField < StructuredField
34
-
35
- include Mail::CommonAddress
36
-
37
- FIELD_NAME = 'resent-to'
38
- CAPITALIZED_FIELD = 'Resent-To'
39
-
40
- def initialize(value = nil, charset = 'utf-8')
41
- self.charset = charset
42
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, 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-To Field
6
+ #
7
+ # The Resent-To field inherits resent-to StructuredField and handles the Resent-To: header
8
+ # field in the email.
9
+ #
10
+ # Sending resent_to to a mail message will instantiate a Mail::Field object that
11
+ # has a ResentToField as its field type. This includes all Mail::CommonAddress
12
+ # module instance metods.
13
+ #
14
+ # Only one Resent-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.resent_to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
21
+ # mail.resent_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
22
+ # mail[:resent_to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
23
+ # mail['resent-to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
24
+ # mail['Resent-To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
25
+ #
26
+ # mail[:resent_to].encoded #=> 'Resent-To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
27
+ # mail[:resent_to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
28
+ # mail[:resent_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
29
+ # mail[:resent_to].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
30
+ class ResentToField < CommonAddressField #:nodoc:
31
+ NAME = 'Resent-To'
54
32
  end
55
33
  end
@@ -1,65 +1,60 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # 4.4.3. REPLY-TO / RESENT-REPLY-TO
5
- #
6
- # Note: The "Return-Path" field is added by the mail transport
7
- # service, at the time of final deliver. It is intended
8
- # to identify a path back to the orginator of the mes-
9
- # sage. The "Reply-To" field is added by the message
10
- # originator and is intended to direct replies.
11
- #
12
- # trace = [return]
13
- # 1*received
14
- #
15
- # return = "Return-Path:" path CRLF
16
- #
17
- # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) /
18
- # obs-path
19
- #
20
- # received = "Received:" name-val-list ";" date-time CRLF
21
- #
22
- # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)]
23
- #
24
- # name-val-pair = item-name CFWS item-value
25
- #
26
- # item-name = ALPHA *(["-"] (ALPHA / DIGIT))
27
- #
28
- # item-value = 1*angle-addr / addr-spec /
29
- # atom / domain / msg-id
30
- #
31
- require 'mail/fields/common/common_address'
32
3
 
33
4
  module Mail
34
- class ReturnPathField < StructuredField
35
-
36
- include Mail::CommonAddress
37
-
38
- FIELD_NAME = 'return-path'
39
- CAPITALIZED_FIELD = 'Return-Path'
40
-
41
- def initialize(value = nil, charset = 'utf-8')
42
- value = nil if value == '<>'
43
- self.charset = charset
44
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
45
- self
46
- end
47
-
48
- def encoded
49
- "#{CAPITALIZED_FIELD}: <#{address}>\r\n"
50
- end
51
-
52
- def decoded
53
- do_decode
5
+ # 4.4.3. REPLY-TO / RESENT-REPLY-TO
6
+ #
7
+ # Note: The "Return-Path" field is added by the mail transport
8
+ # service, at the time of final deliver. It is intended
9
+ # to identify a path back to the orginator of the mes-
10
+ # sage. The "Reply-To" field is added by the message
11
+ # originator and is intended to direct replies.
12
+ #
13
+ # trace = [return]
14
+ # 1*received
15
+ #
16
+ # return = "Return-Path:" path CRLF
17
+ #
18
+ # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) /
19
+ # obs-path
20
+ #
21
+ # received = "Received:" name-val-list ";" date-time CRLF
22
+ #
23
+ # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)]
24
+ #
25
+ # name-val-pair = item-name CFWS item-value
26
+ #
27
+ # item-name = ALPHA *(["-"] (ALPHA / DIGIT))
28
+ #
29
+ # item-value = 1*angle-addr / addr-spec /
30
+ # atom / domain / msg-id
31
+ #
32
+ class ReturnPathField < CommonAddressField #:nodoc:
33
+ NAME = 'Return-Path'
34
+
35
+ def self.singular?
36
+ true
54
37
  end
55
-
56
- def address
57
- addresses.first
38
+
39
+ def initialize(value = nil, charset = nil)
40
+ if value == '<>'
41
+ super nil, charset
42
+ else
43
+ super
44
+ end
58
45
  end
59
-
46
+
60
47
  def default
61
48
  address
62
49
  end
63
-
50
+
51
+ private
52
+ def do_encode
53
+ "#{name}: <#{address}>\r\n"
54
+ end
55
+
56
+ def do_decode
57
+ address
58
+ end
64
59
  end
65
60
  end
@@ -1,67 +1,45 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # = Sender Field
5
- #
6
- # The Sender field inherits sender StructuredField and handles the Sender: header
7
- # field in the email.
8
- #
9
- # Sending sender to a mail message will instantiate a Mail::Field object that
10
- # has a SenderField as its field type. This includes all Mail::CommonAddress
11
- # module instance metods.
12
- #
13
- # Only one Sender 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.sender = 'Mikel Lindsaar <mikel@test.lindsaar.net>'
20
- # mail.sender #=> 'mikel@test.lindsaar.net'
21
- # mail[:sender] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
22
- # mail['sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
23
- # mail['Sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
24
- #
25
- # mail[:sender].encoded #=> "Sender: Mikel Lindsaar <mikel@test.lindsaar.net>\r\n"
26
- # mail[:sender].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>'
27
- # mail[:sender].addresses #=> ['mikel@test.lindsaar.net']
28
- # mail[:sender].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>']
29
- #
30
- require 'mail/fields/common/common_address'
31
3
 
32
4
  module Mail
33
- class SenderField < StructuredField
34
-
35
- include Mail::CommonAddress
36
-
37
- FIELD_NAME = 'sender'
38
- CAPITALIZED_FIELD = 'Sender'
5
+ # = Sender Field
6
+ #
7
+ # The Sender field inherits sender StructuredField and handles the Sender: header
8
+ # field in the email.
9
+ #
10
+ # Sending sender to a mail message will instantiate a Mail::Field object that
11
+ # has a SenderField as its field type. This includes all Mail::CommonAddress
12
+ # module instance metods.
13
+ #
14
+ # Only one Sender 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.sender = 'Mikel Lindsaar <mikel@test.lindsaar.net>'
21
+ # mail.sender #=> 'mikel@test.lindsaar.net'
22
+ # mail[:sender] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
23
+ # mail['sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
24
+ # mail['Sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
25
+ #
26
+ # mail[:sender].encoded #=> "Sender: Mikel Lindsaar <mikel@test.lindsaar.net>\r\n"
27
+ # mail[:sender].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>'
28
+ # mail[:sender].addresses #=> ['mikel@test.lindsaar.net']
29
+ # mail[:sender].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>']
30
+ class SenderField < CommonAddressField #:nodoc:
31
+ NAME = 'Sender'
39
32
 
40
- def initialize(value = nil, charset = 'utf-8')
41
- self.charset = charset
42
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
43
- self
33
+ def self.singular?
34
+ true
44
35
  end
45
36
 
46
- def addresses
47
- [address.address]
37
+ def default
38
+ address
48
39
  end
49
40
 
50
- def address
51
- address_list.addresses.first
52
- end
53
-
54
- def encoded
55
- do_encode(CAPITALIZED_FIELD)
56
- end
57
-
58
- def decoded
59
- do_decode
60
- end
61
-
62
- def default
63
- address.address
41
+ def addresses
42
+ Array(super.first)
64
43
  end
65
-
66
44
  end
67
45
  end