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,35 +1,11 @@
1
1
  # encoding: utf-8
2
- #
3
- # resent-date = "Resent-Date:" date-time CRLF
4
- require 'mail/fields/common/common_date'
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/common_date_field'
5
4
 
6
5
  module Mail
7
- class ResentDateField < StructuredField
8
-
9
- include Mail::CommonDate
10
-
11
- FIELD_NAME = 'resent-date'
12
- CAPITALIZED_FIELD = 'Resent-Date'
13
-
14
- def initialize(value = nil, charset = 'utf-8')
15
- self.charset = charset
16
- if value.blank?
17
- value = ::DateTime.now.strftime('%a, %d %b %Y %H:%M:%S %z')
18
- else
19
- value = strip_field(FIELD_NAME, value)
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
-
6
+ #
7
+ # resent-date = "Resent-Date:" date-time CRLF
8
+ class ResentDateField < CommonDateField #:nodoc:
9
+ NAME = 'Resent-Date'
34
10
  end
35
11
  end
@@ -1,55 +1,34 @@
1
1
  # encoding: utf-8
2
- #
3
- # = Resent-From Field
4
- #
5
- # The Resent-From field inherits resent-from StructuredField and handles the Resent-From: header
6
- # field in the email.
7
- #
8
- # Sending resent_from to a mail message will instantiate a Mail::Field object that
9
- # has a ResentFromField as its field type. This includes all Mail::CommonAddress
10
- # module instance metods.
11
- #
12
- # Only one Resent-From 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_from = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
19
- # mail.resent_from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
20
- # mail[:resent_from] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
21
- # mail['resent-from'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
22
- # mail['Resent-From'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
23
- #
24
- # mail[:resent_from].encoded #=> 'Resent-From: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
25
- # mail[:resent_from].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
26
- # mail[:resent_from].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
27
- # mail[:resent_from].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 ResentFromField < StructuredField
33
-
34
- include Mail::CommonAddress
35
-
36
- FIELD_NAME = 'resent-from'
37
- CAPITALIZED_FIELD = 'Resent-From'
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-From Field
7
+ #
8
+ # The Resent-From field inherits resent-from StructuredField and handles the Resent-From: header
9
+ # field in the email.
10
+ #
11
+ # Sending resent_from to a mail message will instantiate a Mail::Field object that
12
+ # has a ResentFromField as its field type. This includes all Mail::CommonAddress
13
+ # module instance metods.
14
+ #
15
+ # Only one Resent-From 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_from = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
22
+ # mail.resent_from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
23
+ # mail[:resent_from] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
24
+ # mail['resent-from'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
25
+ # mail['Resent-From'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
26
+ #
27
+ # mail[:resent_from].encoded #=> 'Resent-From: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
28
+ # mail[:resent_from].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
29
+ # mail[:resent_from].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
30
+ # mail[:resent_from].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
31
+ class ResentFromField < CommonAddressField #:nodoc:
32
+ NAME = 'Resent-From'
54
33
  end
55
34
  end
@@ -1,34 +1,11 @@
1
1
  # encoding: utf-8
2
- #
3
- # resent-msg-id = "Resent-Message-ID:" msg-id CRLF
4
- require 'mail/fields/common/common_message_id'
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/common_message_id_field'
5
4
 
6
5
  module Mail
7
- class ResentMessageIdField < StructuredField
8
-
9
- include CommonMessageId
10
-
11
- FIELD_NAME = 'resent-message-id'
12
- CAPITALIZED_FIELD = 'Resent-Message-ID'
13
-
14
- def initialize(value = nil, charset = 'utf-8')
15
- self.charset = charset
16
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
17
- self.parse
18
- self
19
- end
20
-
21
- def name
22
- 'Resent-Message-ID'
23
- end
24
-
25
- def encoded
26
- do_encode(CAPITALIZED_FIELD)
27
- end
28
-
29
- def decoded
30
- do_decode
31
- end
32
-
6
+ #
7
+ # resent-msg-id = "Resent-Message-ID:" msg-id CRLF
8
+ class ResentMessageIdField < CommonMessageIdField #:nodoc:
9
+ NAME = 'Resent-Message-ID'
33
10
  end
34
11
  end
@@ -1,62 +1,33 @@
1
1
  # encoding: utf-8
2
- #
3
- # = Resent-Sender Field
4
- #
5
- # The Resent-Sender field inherits resent-sender StructuredField and handles the Resent-Sender: header
6
- # field in the email.
7
- #
8
- # Sending resent_sender to a mail message will instantiate a Mail::Field object that
9
- # has a ResentSenderField as its field type. This includes all Mail::CommonAddress
10
- # module instance metods.
11
- #
12
- # Only one Resent-Sender 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_sender = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
19
- # mail.resent_sender #=> ['mikel@test.lindsaar.net']
20
- # mail[:resent_sender] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
21
- # mail['resent-sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
22
- # mail['Resent-Sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
23
- #
24
- # mail.resent_sender.to_s #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
25
- # mail.resent_sender.addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
26
- # mail.resent_sender.formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
27
- #
28
- require 'mail/fields/common/common_address'
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/common_address_field'
29
4
 
30
5
  module Mail
31
- class ResentSenderField < StructuredField
32
-
33
- include Mail::CommonAddress
34
-
35
- FIELD_NAME = 'resent-sender'
36
- CAPITALIZED_FIELD = 'Resent-Sender'
37
-
38
- def initialize(value = nil, charset = 'utf-8')
39
- self.charset = charset
40
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
41
- self.parse
42
- self
43
- end
44
-
45
- def addresses
46
- [address.address]
47
- end
48
-
49
- def address
50
- tree.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
-
6
+ # = Resent-Sender Field
7
+ #
8
+ # The Resent-Sender field inherits resent-sender StructuredField and handles the Resent-Sender: header
9
+ # field in the email.
10
+ #
11
+ # Sending resent_sender to a mail message will instantiate a Mail::Field object that
12
+ # has a ResentSenderField as its field type. This includes all Mail::CommonAddress
13
+ # module instance metods.
14
+ #
15
+ # Only one Resent-Sender 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_sender = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
22
+ # mail.resent_sender #=> ['mikel@test.lindsaar.net']
23
+ # mail[:resent_sender] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
24
+ # mail['resent-sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
25
+ # mail['Resent-Sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
26
+ #
27
+ # mail.resent_sender.to_s #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
28
+ # mail.resent_sender.addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
29
+ # mail.resent_sender.formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
30
+ class ResentSenderField < CommonAddressField #:nodoc:
31
+ NAME = 'Resent-Sender'
61
32
  end
62
33
  end
@@ -1,55 +1,34 @@
1
1
  # encoding: utf-8
2
- #
3
- # = Resent-To Field
4
- #
5
- # The Resent-To field inherits resent-to StructuredField and handles the Resent-To: header
6
- # field in the email.
7
- #
8
- # Sending resent_to to a mail message will instantiate a Mail::Field object that
9
- # has a ResentToField as its field type. This includes all Mail::CommonAddress
10
- # module instance metods.
11
- #
12
- # Only one Resent-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.resent_to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
19
- # mail.resent_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
20
- # mail[:resent_to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
21
- # mail['resent-to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
22
- # mail['Resent-To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
23
- #
24
- # mail[:resent_to].encoded #=> 'Resent-To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
25
- # mail[:resent_to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
26
- # mail[:resent_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
27
- # mail[:resent_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 ResentToField < StructuredField
33
-
34
- include Mail::CommonAddress
35
-
36
- FIELD_NAME = 'resent-to'
37
- CAPITALIZED_FIELD = 'Resent-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
+ # = Resent-To Field
7
+ #
8
+ # The Resent-To field inherits resent-to StructuredField and handles the Resent-To: header
9
+ # field in the email.
10
+ #
11
+ # Sending resent_to to a mail message will instantiate a Mail::Field object that
12
+ # has a ResentToField as its field type. This includes all Mail::CommonAddress
13
+ # module instance metods.
14
+ #
15
+ # Only one Resent-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.resent_to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
22
+ # mail.resent_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
23
+ # mail[:resent_to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
24
+ # mail['resent-to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
25
+ # mail['Resent-To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
26
+ #
27
+ # mail[:resent_to].encoded #=> 'Resent-To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
28
+ # mail[:resent_to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
29
+ # mail[:resent_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
30
+ # mail[:resent_to].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
31
+ class ResentToField < CommonAddressField #:nodoc:
32
+ NAME = 'Resent-To'
54
33
  end
55
34
  end
@@ -1,65 +1,61 @@
1
1
  # encoding: utf-8
2
- #
3
- # 4.4.3. REPLY-TO / RESENT-REPLY-TO
4
- #
5
- # Note: The "Return-Path" field is added by the mail transport
6
- # service, at the time of final deliver. It is intended
7
- # to identify a path back to the orginator of the mes-
8
- # sage. The "Reply-To" field is added by the message
9
- # originator and is intended to direct replies.
10
- #
11
- # trace = [return]
12
- # 1*received
13
- #
14
- # return = "Return-Path:" path CRLF
15
- #
16
- # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) /
17
- # obs-path
18
- #
19
- # received = "Received:" name-val-list ";" date-time CRLF
20
- #
21
- # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)]
22
- #
23
- # name-val-pair = item-name CFWS item-value
24
- #
25
- # item-name = ALPHA *(["-"] (ALPHA / DIGIT))
26
- #
27
- # item-value = 1*angle-addr / addr-spec /
28
- # atom / domain / msg-id
29
- #
30
- require 'mail/fields/common/common_address'
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/common_address_field'
31
4
 
32
5
  module Mail
33
- class ReturnPathField < StructuredField
34
-
35
- include Mail::CommonAddress
36
-
37
- FIELD_NAME = 'return-path'
38
- CAPITALIZED_FIELD = 'Return-Path'
39
-
40
- def initialize(value = nil, charset = 'utf-8')
41
- value = nil if value == '<>'
42
- self.charset = charset
43
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
44
- self.parse
45
- self
46
- end
47
-
48
- def encoded
49
- "#{CAPITALIZED_FIELD}: <#{address}>\r\n"
50
- end
51
-
52
- def decoded
53
- do_decode
6
+ # 4.4.3. REPLY-TO / RESENT-REPLY-TO
7
+ #
8
+ # Note: The "Return-Path" field is added by the mail transport
9
+ # service, at the time of final deliver. It is intended
10
+ # to identify a path back to the orginator of the mes-
11
+ # sage. The "Reply-To" field is added by the message
12
+ # originator and is intended to direct replies.
13
+ #
14
+ # trace = [return]
15
+ # 1*received
16
+ #
17
+ # return = "Return-Path:" path CRLF
18
+ #
19
+ # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) /
20
+ # obs-path
21
+ #
22
+ # received = "Received:" name-val-list ";" date-time CRLF
23
+ #
24
+ # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)]
25
+ #
26
+ # name-val-pair = item-name CFWS item-value
27
+ #
28
+ # item-name = ALPHA *(["-"] (ALPHA / DIGIT))
29
+ #
30
+ # item-value = 1*angle-addr / addr-spec /
31
+ # atom / domain / msg-id
32
+ #
33
+ class ReturnPathField < CommonAddressField #:nodoc:
34
+ NAME = 'Return-Path'
35
+
36
+ def self.singular?
37
+ true
54
38
  end
55
-
56
- def address
57
- addresses.first
39
+
40
+ def initialize(value = nil, charset = nil)
41
+ if value == '<>'
42
+ super nil, charset
43
+ else
44
+ super
45
+ end
58
46
  end
59
-
47
+
60
48
  def default
61
49
  address
62
50
  end
63
-
51
+
52
+ private
53
+ def do_encode
54
+ "#{name}: <#{address}>\r\n"
55
+ end
56
+
57
+ def do_decode
58
+ address
59
+ end
64
60
  end
65
61
  end
@@ -1,67 +1,46 @@
1
1
  # encoding: utf-8
2
- #
3
- # = Sender Field
4
- #
5
- # The Sender field inherits sender StructuredField and handles the Sender: header
6
- # field in the email.
7
- #
8
- # Sending sender to a mail message will instantiate a Mail::Field object that
9
- # has a SenderField as its field type. This includes all Mail::CommonAddress
10
- # module instance metods.
11
- #
12
- # Only one Sender 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.sender = 'Mikel Lindsaar <mikel@test.lindsaar.net>'
19
- # mail.sender #=> 'mikel@test.lindsaar.net'
20
- # mail[:sender] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
21
- # mail['sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
22
- # mail['Sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
23
- #
24
- # mail[:sender].encoded #=> "Sender: Mikel Lindsaar <mikel@test.lindsaar.net>\r\n"
25
- # mail[:sender].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>'
26
- # mail[:sender].addresses #=> ['mikel@test.lindsaar.net']
27
- # mail[:sender].formatted #=> ['Mikel Lindsaar <mikel@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 SenderField < StructuredField
33
-
34
- include Mail::CommonAddress
35
-
36
- FIELD_NAME = 'sender'
37
- CAPITALIZED_FIELD = 'Sender'
6
+ # = Sender Field
7
+ #
8
+ # The Sender field inherits sender StructuredField and handles the Sender: header
9
+ # field in the email.
10
+ #
11
+ # Sending sender to a mail message will instantiate a Mail::Field object that
12
+ # has a SenderField as its field type. This includes all Mail::CommonAddress
13
+ # module instance metods.
14
+ #
15
+ # Only one Sender 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.sender = 'Mikel Lindsaar <mikel@test.lindsaar.net>'
22
+ # mail.sender #=> 'mikel@test.lindsaar.net'
23
+ # mail[:sender] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
24
+ # mail['sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
25
+ # mail['Sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
26
+ #
27
+ # mail[:sender].encoded #=> "Sender: Mikel Lindsaar <mikel@test.lindsaar.net>\r\n"
28
+ # mail[:sender].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>'
29
+ # mail[:sender].addresses #=> ['mikel@test.lindsaar.net']
30
+ # mail[:sender].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>']
31
+ class SenderField < CommonAddressField #:nodoc:
32
+ NAME = 'Sender'
38
33
 
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
34
+ def self.singular?
35
+ true
44
36
  end
45
37
 
46
- def addresses
47
- [address.address]
38
+ def default
39
+ address
48
40
  end
49
41
 
50
- def address
51
- tree.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
42
+ def addresses
43
+ Array(super.first)
64
44
  end
65
-
66
45
  end
67
46
  end
@@ -1,12 +1,13 @@
1
1
  # encoding: utf-8
2
- require 'mail/fields/common/common_field'
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/common_field'
3
4
 
4
5
  module Mail
5
6
  # Provides access to a structured header field
6
7
  #
7
8
  # ===Per RFC 2822:
8
9
  # 2.2.2. Structured Header Field Bodies
9
- #
10
+ #
10
11
  # Some field bodies in this standard have specific syntactical
11
12
  # structure more restrictive than the unstructured field bodies
12
13
  # described above. These are referred to as "structured" field bodies.
@@ -19,33 +20,6 @@ module Mail
19
20
  # characters are subject to header "folding" and "unfolding" as
20
21
  # described in section 2.2.3. Semantic analysis of structured field
21
22
  # bodies is given along with their syntax.
22
- class StructuredField
23
-
24
- include Mail::CommonField
25
- include Mail::Utilities
26
-
27
- def initialize(name = nil, value = nil, charset = nil)
28
- self.name = name
29
- self.value = value
30
- self.charset = charset
31
- self
32
- end
33
-
34
- def charset
35
- @charset
36
- end
37
-
38
- def charset=(val)
39
- @charset = val
40
- end
41
-
42
- def default
43
- decoded
44
- end
45
-
46
- def errors
47
- []
48
- end
49
-
23
+ class StructuredField < CommonField #:nodoc:
50
24
  end
51
25
  end
@@ -1,16 +1,15 @@
1
1
  # encoding: utf-8
2
- #
3
- # subject = "Subject:" unstructured CRLF
2
+ # frozen_string_literal: true
3
+ require 'mail/fields/named_unstructured_field'
4
+
4
5
  module Mail
5
- class SubjectField < UnstructuredField
6
-
7
- FIELD_NAME = 'subject'
8
- CAPITALIZED_FIELD = "Subject"
9
-
10
- def initialize(value = nil, charset = 'utf-8')
11
- self.charset = charset
12
- super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
6
+ #
7
+ # subject = "Subject:" unstructured CRLF
8
+ class SubjectField < NamedUnstructuredField #:nodoc:
9
+ NAME = 'Subject'
10
+
11
+ def self.singular?
12
+ true
13
13
  end
14
-
15
14
  end
16
15
  end