mail 2.7.1 → 2.8.0.rc1

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 (122) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +45 -28
  3. data/lib/mail/attachments_list.rb +2 -5
  4. data/lib/mail/body.rb +24 -47
  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.rb +30 -59
  22. data/lib/mail/envelope.rb +11 -14
  23. data/lib/mail/field.rb +37 -53
  24. data/lib/mail/field_list.rb +60 -7
  25. data/lib/mail/fields/bcc_field.rb +34 -52
  26. data/lib/mail/fields/cc_field.rb +28 -49
  27. data/lib/mail/fields/comments_field.rb +27 -37
  28. data/lib/mail/fields/common_address_field.rb +170 -0
  29. data/lib/mail/fields/common_date_field.rb +58 -0
  30. data/lib/mail/fields/common_field.rb +77 -0
  31. data/lib/mail/fields/common_message_id_field.rb +42 -0
  32. data/lib/mail/fields/content_description_field.rb +7 -14
  33. data/lib/mail/fields/content_disposition_field.rb +13 -38
  34. data/lib/mail/fields/content_id_field.rb +24 -51
  35. data/lib/mail/fields/content_location_field.rb +11 -25
  36. data/lib/mail/fields/content_transfer_encoding_field.rb +31 -31
  37. data/lib/mail/fields/content_type_field.rb +46 -71
  38. data/lib/mail/fields/date_field.rb +23 -51
  39. data/lib/mail/fields/from_field.rb +28 -49
  40. data/lib/mail/fields/in_reply_to_field.rb +38 -49
  41. data/lib/mail/fields/keywords_field.rb +18 -31
  42. data/lib/mail/fields/message_id_field.rb +25 -71
  43. data/lib/mail/fields/mime_version_field.rb +19 -30
  44. data/lib/mail/fields/named_structured_field.rb +11 -0
  45. data/lib/mail/fields/named_unstructured_field.rb +11 -0
  46. data/lib/mail/fields/optional_field.rb +5 -6
  47. data/lib/mail/fields/{common/parameter_hash.rb → parameter_hash.rb} +12 -10
  48. data/lib/mail/fields/received_field.rb +43 -57
  49. data/lib/mail/fields/references_field.rb +35 -49
  50. data/lib/mail/fields/reply_to_field.rb +28 -49
  51. data/lib/mail/fields/resent_bcc_field.rb +28 -49
  52. data/lib/mail/fields/resent_cc_field.rb +28 -49
  53. data/lib/mail/fields/resent_date_field.rb +5 -29
  54. data/lib/mail/fields/resent_from_field.rb +28 -49
  55. data/lib/mail/fields/resent_message_id_field.rb +5 -29
  56. data/lib/mail/fields/resent_sender_field.rb +27 -56
  57. data/lib/mail/fields/resent_to_field.rb +28 -49
  58. data/lib/mail/fields/return_path_field.rb +50 -54
  59. data/lib/mail/fields/sender_field.rb +34 -55
  60. data/lib/mail/fields/structured_field.rb +3 -30
  61. data/lib/mail/fields/subject_field.rb +9 -11
  62. data/lib/mail/fields/to_field.rb +28 -49
  63. data/lib/mail/fields/unstructured_field.rb +16 -48
  64. data/lib/mail/header.rb +69 -110
  65. data/lib/mail/matchers/attachment_matchers.rb +15 -0
  66. data/lib/mail/message.rb +46 -64
  67. data/lib/mail/multibyte/chars.rb +8 -166
  68. data/lib/mail/multibyte/utils.rb +26 -43
  69. data/lib/mail/multibyte.rb +1 -11
  70. data/lib/mail/network/delivery_methods/exim.rb +5 -4
  71. data/lib/mail/network/delivery_methods/file_delivery.rb +11 -10
  72. data/lib/mail/network/delivery_methods/logger_delivery.rb +2 -5
  73. data/lib/mail/network/delivery_methods/sendmail.rb +27 -35
  74. data/lib/mail/network/delivery_methods/smtp.rb +3 -3
  75. data/lib/mail/network/delivery_methods/smtp_connection.rb +3 -12
  76. data/lib/mail/network/delivery_methods/test_mailer.rb +4 -2
  77. data/lib/mail/network/retriever_methods/base.rb +8 -8
  78. data/lib/mail/network/retriever_methods/imap.rb +2 -2
  79. data/lib/mail/network/retriever_methods/pop3.rb +2 -2
  80. data/lib/mail/network/retriever_methods/test_retriever.rb +2 -1
  81. data/lib/mail/parsers/address_lists_parser.rb +33070 -33064
  82. data/lib/mail/parsers/address_lists_parser.rl +7 -0
  83. data/lib/mail/parsers/content_disposition_parser.rb +833 -827
  84. data/lib/mail/parsers/content_disposition_parser.rl +7 -0
  85. data/lib/mail/parsers/content_location_parser.rb +770 -764
  86. data/lib/mail/parsers/content_location_parser.rl +7 -0
  87. data/lib/mail/parsers/content_transfer_encoding_parser.rb +474 -468
  88. data/lib/mail/parsers/content_transfer_encoding_parser.rl +7 -0
  89. data/lib/mail/parsers/content_type_parser.rb +971 -965
  90. data/lib/mail/parsers/content_type_parser.rl +7 -0
  91. data/lib/mail/parsers/date_time_parser.rb +838 -832
  92. data/lib/mail/parsers/date_time_parser.rl +7 -0
  93. data/lib/mail/parsers/envelope_from_parser.rb +3623 -3529
  94. data/lib/mail/parsers/envelope_from_parser.rl +7 -0
  95. data/lib/mail/parsers/message_ids_parser.rb +5107 -2800
  96. data/lib/mail/parsers/message_ids_parser.rl +12 -1
  97. data/lib/mail/parsers/mime_version_parser.rb +463 -457
  98. data/lib/mail/parsers/mime_version_parser.rl +7 -0
  99. data/lib/mail/parsers/phrase_lists_parser.rb +836 -830
  100. data/lib/mail/parsers/phrase_lists_parser.rl +8 -1
  101. data/lib/mail/parsers/received_parser.rb +8688 -8682
  102. data/lib/mail/parsers/received_parser.rl +7 -0
  103. data/lib/mail/parsers/rfc5322.rl +28 -13
  104. data/lib/mail/parsers.rb +11 -17
  105. data/lib/mail/part.rb +5 -9
  106. data/lib/mail/parts_list.rb +57 -0
  107. data/lib/mail/smtp_envelope.rb +57 -0
  108. data/lib/mail/utilities.rb +307 -69
  109. data/lib/mail/version.rb +3 -3
  110. data/lib/mail/yaml.rb +30 -0
  111. data/lib/mail.rb +0 -20
  112. metadata +74 -21
  113. data/lib/mail/check_delivery_params.rb +0 -60
  114. data/lib/mail/core_extensions/smtp.rb +0 -28
  115. data/lib/mail/core_extensions/string.rb +0 -17
  116. data/lib/mail/fields/common/address_container.rb +0 -17
  117. data/lib/mail/fields/common/common_address.rb +0 -161
  118. data/lib/mail/fields/common/common_date.rb +0 -36
  119. data/lib/mail/fields/common/common_field.rb +0 -52
  120. data/lib/mail/fields/common/common_message_id.rb +0 -49
  121. data/lib/mail/version_specific/ruby_1_8.rb +0 -163
  122. data/lib/mail/version_specific/ruby_1_9.rb +0 -278
@@ -1,55 +1,34 @@
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'
3
+ require 'mail/fields/common_address_field'
31
4
 
32
5
  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
-
6
+ # = Resent-Cc Field
7
+ #
8
+ # The Resent-Cc field inherits resent-cc StructuredField and handles the Resent-Cc: header
9
+ # field in the email.
10
+ #
11
+ # Sending resent_cc to a mail message will instantiate a Mail::Field object that
12
+ # has a ResentCcField as its field type. This includes all Mail::CommonAddress
13
+ # module instance metods.
14
+ #
15
+ # Only one Resent-Cc field can appear in a header, though it can have multiple
16
+ # addresses and groups of addresses.
17
+ #
18
+ # == Examples:
19
+ #
20
+ # mail = Mail.new
21
+ # mail.resent_cc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
22
+ # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
23
+ # mail[:resent_cc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
24
+ # mail['resent-cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
25
+ # mail['Resent-Cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
26
+ #
27
+ # mail[:resent_cc].encoded #=> 'Resent-Cc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
28
+ # mail[:resent_cc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
29
+ # mail[:resent_cc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
30
+ # mail[:resent_cc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
31
+ class ResentCcField < CommonAddressField #:nodoc:
32
+ NAME = 'Resent-Cc'
54
33
  end
55
34
  end
@@ -1,35 +1,11 @@
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'
3
+ require 'mail/fields/common_date_field'
6
4
 
7
5
  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
-
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
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'
3
+ require 'mail/fields/common_address_field'
31
4
 
32
5
  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, 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
-
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,35 +1,11 @@
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'
3
+ require 'mail/fields/common_message_id_field'
6
4
 
7
5
  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, 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
-
6
+ #
7
+ # resent-msg-id = "Resent-Message-ID:" msg-id CRLF
8
+ class ResentMessageIdField < CommonMessageIdField #:nodoc:
9
+ NAME = 'Resent-Message-ID'
34
10
  end
35
11
  end
@@ -1,62 +1,33 @@
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'
3
+ require 'mail/fields/common_address_field'
30
4
 
31
5
  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, 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
-
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
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'
3
+ require 'mail/fields/common_address_field'
31
4
 
32
5
  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, 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
-
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
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'
3
+ require 'mail/fields/common_address_field'
32
4
 
33
5
  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, 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
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
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'
3
+ require 'mail/fields/common_address_field'
31
4
 
32
5
  module Mail
33
- class SenderField < StructuredField
34
-
35
- include Mail::CommonAddress
36
-
37
- FIELD_NAME = 'sender'
38
- 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'
39
33
 
40
- def initialize(value = nil, charset = 'utf-8')
41
- self.charset = charset
42
- super(CAPITALIZED_FIELD, value, charset)
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
- 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
42
+ def addresses
43
+ Array(super.first)
64
44
  end
65
-
66
45
  end
67
46
  end