mail 2.7.1 → 2.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +135 -59
  3. data/lib/mail/attachments_list.rb +5 -6
  4. data/lib/mail/body.rb +51 -74
  5. data/lib/mail/constants.rb +27 -5
  6. data/lib/mail/elements/address.rb +27 -27
  7. data/lib/mail/elements/address_list.rb +1 -1
  8. data/lib/mail/elements/content_disposition_element.rb +1 -1
  9. data/lib/mail/elements/content_location_element.rb +1 -1
  10. data/lib/mail/elements/content_transfer_encoding_element.rb +1 -1
  11. data/lib/mail/elements/content_type_element.rb +8 -4
  12. data/lib/mail/elements/date_time_element.rb +1 -1
  13. data/lib/mail/elements/envelope_from_element.rb +13 -7
  14. data/lib/mail/elements/message_ids_element.rb +14 -5
  15. data/lib/mail/elements/mime_version_element.rb +1 -1
  16. data/lib/mail/elements/phrase_list.rb +7 -2
  17. data/lib/mail/elements/received_element.rb +20 -6
  18. data/lib/mail/encodings/7bit.rb +5 -0
  19. data/lib/mail/encodings/base64.rb +2 -2
  20. data/lib/mail/encodings/quoted_printable.rb +2 -2
  21. data/lib/mail/encodings/unix_to_unix.rb +1 -1
  22. data/lib/mail/encodings.rb +32 -61
  23. data/lib/mail/envelope.rb +11 -14
  24. data/lib/mail/field.rb +100 -86
  25. data/lib/mail/field_list.rb +61 -8
  26. data/lib/mail/fields/bcc_field.rb +33 -52
  27. data/lib/mail/fields/cc_field.rb +27 -49
  28. data/lib/mail/fields/comments_field.rb +26 -37
  29. data/lib/mail/fields/common_address_field.rb +162 -0
  30. data/lib/mail/fields/common_date_field.rb +56 -0
  31. data/lib/mail/fields/common_field.rb +77 -0
  32. data/lib/mail/fields/common_message_id_field.rb +41 -0
  33. data/lib/mail/fields/content_description_field.rb +6 -14
  34. data/lib/mail/fields/content_disposition_field.rb +11 -38
  35. data/lib/mail/fields/content_id_field.rb +23 -51
  36. data/lib/mail/fields/content_location_field.rb +10 -25
  37. data/lib/mail/fields/content_transfer_encoding_field.rb +30 -31
  38. data/lib/mail/fields/content_type_field.rb +49 -75
  39. data/lib/mail/fields/date_field.rb +22 -51
  40. data/lib/mail/fields/from_field.rb +27 -49
  41. data/lib/mail/fields/in_reply_to_field.rb +37 -49
  42. data/lib/mail/fields/keywords_field.rb +17 -31
  43. data/lib/mail/fields/message_id_field.rb +24 -71
  44. data/lib/mail/fields/mime_version_field.rb +18 -30
  45. data/lib/mail/fields/named_structured_field.rb +10 -0
  46. data/lib/mail/fields/named_unstructured_field.rb +10 -0
  47. data/lib/mail/fields/optional_field.rb +5 -7
  48. data/lib/mail/fields/{common/parameter_hash.rb → parameter_hash.rb} +12 -10
  49. data/lib/mail/fields/received_field.rb +42 -57
  50. data/lib/mail/fields/references_field.rb +34 -49
  51. data/lib/mail/fields/reply_to_field.rb +27 -49
  52. data/lib/mail/fields/resent_bcc_field.rb +27 -49
  53. data/lib/mail/fields/resent_cc_field.rb +27 -49
  54. data/lib/mail/fields/resent_date_field.rb +4 -29
  55. data/lib/mail/fields/resent_from_field.rb +27 -49
  56. data/lib/mail/fields/resent_message_id_field.rb +4 -29
  57. data/lib/mail/fields/resent_sender_field.rb +26 -56
  58. data/lib/mail/fields/resent_to_field.rb +27 -49
  59. data/lib/mail/fields/return_path_field.rb +49 -54
  60. data/lib/mail/fields/sender_field.rb +33 -55
  61. data/lib/mail/fields/structured_field.rb +2 -30
  62. data/lib/mail/fields/subject_field.rb +8 -11
  63. data/lib/mail/fields/to_field.rb +27 -49
  64. data/lib/mail/fields/unstructured_field.rb +15 -48
  65. data/lib/mail/fields.rb +9 -0
  66. data/lib/mail/header.rb +69 -110
  67. data/lib/mail/mail.rb +32 -27
  68. data/lib/mail/matchers/attachment_matchers.rb +15 -0
  69. data/lib/mail/message.rb +67 -78
  70. data/lib/mail/multibyte/chars.rb +9 -167
  71. data/lib/mail/multibyte/unicode.rb +1 -1
  72. data/lib/mail/multibyte/utils.rb +26 -43
  73. data/lib/mail/multibyte.rb +1 -11
  74. data/lib/mail/network/delivery_methods/exim.rb +5 -4
  75. data/lib/mail/network/delivery_methods/file_delivery.rb +13 -12
  76. data/lib/mail/network/delivery_methods/logger_delivery.rb +2 -5
  77. data/lib/mail/network/delivery_methods/sendmail.rb +27 -35
  78. data/lib/mail/network/delivery_methods/smtp.rb +81 -30
  79. data/lib/mail/network/delivery_methods/smtp_connection.rb +10 -19
  80. data/lib/mail/network/delivery_methods/test_mailer.rb +8 -6
  81. data/lib/mail/network/retriever_methods/base.rb +13 -13
  82. data/lib/mail/network/retriever_methods/imap.rb +8 -5
  83. data/lib/mail/network/retriever_methods/pop3.rb +22 -22
  84. data/lib/mail/network/retriever_methods/test_retriever.rb +2 -1
  85. data/lib/mail/parsers/address_lists_parser.rb +33073 -33064
  86. data/lib/mail/parsers/address_lists_parser.rl +11 -0
  87. data/lib/mail/parsers/content_disposition_parser.rb +837 -828
  88. data/lib/mail/parsers/content_disposition_parser.rl +11 -0
  89. data/lib/mail/parsers/content_location_parser.rb +773 -764
  90. data/lib/mail/parsers/content_location_parser.rl +12 -1
  91. data/lib/mail/parsers/content_transfer_encoding_parser.rb +477 -468
  92. data/lib/mail/parsers/content_transfer_encoding_parser.rl +11 -0
  93. data/lib/mail/parsers/content_type_parser.rb +974 -965
  94. data/lib/mail/parsers/content_type_parser.rl +11 -0
  95. data/lib/mail/parsers/date_time_parser.rb +841 -832
  96. data/lib/mail/parsers/date_time_parser.rl +11 -0
  97. data/lib/mail/parsers/envelope_from_parser.rb +3627 -3530
  98. data/lib/mail/parsers/envelope_from_parser.rl +11 -0
  99. data/lib/mail/parsers/message_ids_parser.rb +5110 -2800
  100. data/lib/mail/parsers/message_ids_parser.rl +16 -1
  101. data/lib/mail/parsers/mime_version_parser.rb +466 -457
  102. data/lib/mail/parsers/mime_version_parser.rl +11 -0
  103. data/lib/mail/parsers/phrase_lists_parser.rb +839 -830
  104. data/lib/mail/parsers/phrase_lists_parser.rl +12 -1
  105. data/lib/mail/parsers/received_parser.rb +8692 -8683
  106. data/lib/mail/parsers/received_parser.rl +11 -0
  107. data/lib/mail/parsers/rfc5322.rl +28 -13
  108. data/lib/mail/parsers.rb +11 -17
  109. data/lib/mail/part.rb +24 -28
  110. data/lib/mail/parts_list.rb +57 -0
  111. data/lib/mail/smtp_envelope.rb +57 -0
  112. data/lib/mail/utilities.rb +321 -69
  113. data/lib/mail/version.rb +1 -1
  114. data/lib/mail/yaml.rb +30 -0
  115. data/lib/mail.rb +2 -22
  116. metadata +83 -19
  117. data/lib/mail/check_delivery_params.rb +0 -60
  118. data/lib/mail/core_extensions/smtp.rb +0 -28
  119. data/lib/mail/core_extensions/string.rb +0 -17
  120. data/lib/mail/fields/common/address_container.rb +0 -17
  121. data/lib/mail/fields/common/common_address.rb +0 -161
  122. data/lib/mail/fields/common/common_date.rb +0 -36
  123. data/lib/mail/fields/common/common_field.rb +0 -52
  124. data/lib/mail/fields/common/common_message_id.rb +0 -49
  125. data/lib/mail/version_specific/ruby_1_8.rb +0 -163
  126. data/lib/mail/version_specific/ruby_1_9.rb +0 -278
@@ -1,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, 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, 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, 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, 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, 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, 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
@@ -1,13 +1,12 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- require 'mail/fields/common/common_field'
4
3
 
5
4
  module Mail
6
5
  # Provides access to a structured header field
7
6
  #
8
7
  # ===Per RFC 2822:
9
8
  # 2.2.2. Structured Header Field Bodies
10
- #
9
+ #
11
10
  # Some field bodies in this standard have specific syntactical
12
11
  # structure more restrictive than the unstructured field bodies
13
12
  # described above. These are referred to as "structured" field bodies.
@@ -20,33 +19,6 @@ module Mail
20
19
  # characters are subject to header "folding" and "unfolding" as
21
20
  # described in section 2.2.3. Semantic analysis of structured field
22
21
  # bodies is given along with their syntax.
23
- class StructuredField
24
-
25
- include Mail::CommonField
26
- include Mail::Utilities
27
-
28
- def initialize(name = nil, value = nil, charset = nil)
29
- self.name = name
30
- self.value = value
31
- self.charset = charset
32
- self
33
- end
34
-
35
- def charset
36
- @charset
37
- end
38
-
39
- def charset=(val)
40
- @charset = val
41
- end
42
-
43
- def default
44
- decoded
45
- end
46
-
47
- def errors
48
- []
49
- end
50
-
22
+ class StructuredField < CommonField #:nodoc:
51
23
  end
52
24
  end
@@ -1,17 +1,14 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # subject = "Subject:" unstructured CRLF
3
+
5
4
  module Mail
6
- class SubjectField < UnstructuredField
7
-
8
- FIELD_NAME = 'subject'
9
- CAPITALIZED_FIELD = "Subject"
10
-
11
- def initialize(value = nil, charset = 'utf-8')
12
- self.charset = charset
13
- super(CAPITALIZED_FIELD, value, charset)
5
+ #
6
+ # subject = "Subject:" unstructured CRLF
7
+ class SubjectField < NamedUnstructuredField #:nodoc:
8
+ NAME = 'Subject'
9
+
10
+ def self.singular?
11
+ true
14
12
  end
15
-
16
13
  end
17
14
  end
@@ -1,55 +1,33 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
- #
4
- # = To Field
5
- #
6
- # The To field inherits to StructuredField and handles the To: header
7
- # field in the email.
8
- #
9
- # Sending to to a mail message will instantiate a Mail::Field object that
10
- # has a ToField as its field type. This includes all Mail::CommonAddress
11
- # module instance metods.
12
- #
13
- # Only one 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.to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
20
- # mail.to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
21
- # mail[:to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ToField:0x180e1c4
22
- # mail['to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ToField:0x180e1c4
23
- # mail['To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ToField:0x180e1c4
24
- #
25
- # mail[:to].encoded #=> 'To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
26
- # mail[:to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
27
- # mail[:to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
28
- # mail[: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 ToField < StructuredField
34
-
35
- include Mail::CommonAddress
36
-
37
- FIELD_NAME = 'to'
38
- CAPITALIZED_FIELD = 'To'
39
-
40
- def initialize(value = nil, charset = 'utf-8')
41
- self.charset = charset
42
- super(CAPITALIZED_FIELD, value, charset)
43
- self
44
- end
45
-
46
- def encoded
47
- do_encode(CAPITALIZED_FIELD)
48
- end
49
-
50
- def decoded
51
- do_decode
52
- end
53
-
5
+ # = To Field
6
+ #
7
+ # The To field inherits to StructuredField and handles the To: header
8
+ # field in the email.
9
+ #
10
+ # Sending to to a mail message will instantiate a Mail::Field object that
11
+ # has a ToField as its field type. This includes all Mail::CommonAddress
12
+ # module instance metods.
13
+ #
14
+ # Only one 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.to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
21
+ # mail.to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
22
+ # mail[:to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ToField:0x180e1c4
23
+ # mail['to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ToField:0x180e1c4
24
+ # mail['To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ToField:0x180e1c4
25
+ #
26
+ # mail[:to].encoded #=> 'To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
27
+ # mail[:to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
28
+ # mail[:to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
29
+ # mail[:to].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
30
+ class ToField < CommonAddressField #:nodoc:
31
+ NAME = 'To'
54
32
  end
55
33
  end