dball-mail 2.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 (122) hide show
  1. data/CHANGELOG.rdoc +459 -0
  2. data/README.rdoc +582 -0
  3. data/Rakefile +66 -0
  4. data/TODO.rdoc +9 -0
  5. data/lib/VERSION +4 -0
  6. data/lib/mail/attachments_list.rb +105 -0
  7. data/lib/mail/body.rb +286 -0
  8. data/lib/mail/configuration.rb +71 -0
  9. data/lib/mail/core_extensions/nil.rb +11 -0
  10. data/lib/mail/core_extensions/string.rb +27 -0
  11. data/lib/mail/elements/address.rb +306 -0
  12. data/lib/mail/elements/address_list.rb +74 -0
  13. data/lib/mail/elements/content_disposition_element.rb +30 -0
  14. data/lib/mail/elements/content_location_element.rb +25 -0
  15. data/lib/mail/elements/content_transfer_encoding_element.rb +24 -0
  16. data/lib/mail/elements/content_type_element.rb +35 -0
  17. data/lib/mail/elements/date_time_element.rb +26 -0
  18. data/lib/mail/elements/envelope_from_element.rb +34 -0
  19. data/lib/mail/elements/message_ids_element.rb +29 -0
  20. data/lib/mail/elements/mime_version_element.rb +26 -0
  21. data/lib/mail/elements/phrase_list.rb +21 -0
  22. data/lib/mail/elements/received_element.rb +30 -0
  23. data/lib/mail/elements.rb +14 -0
  24. data/lib/mail/encodings/7bit.rb +31 -0
  25. data/lib/mail/encodings/8bit.rb +31 -0
  26. data/lib/mail/encodings/base64.rb +33 -0
  27. data/lib/mail/encodings/binary.rb +31 -0
  28. data/lib/mail/encodings/quoted_printable.rb +38 -0
  29. data/lib/mail/encodings/transfer_encoding.rb +58 -0
  30. data/lib/mail/encodings.rb +268 -0
  31. data/lib/mail/envelope.rb +35 -0
  32. data/lib/mail/field.rb +223 -0
  33. data/lib/mail/field_list.rb +33 -0
  34. data/lib/mail/fields/bcc_field.rb +56 -0
  35. data/lib/mail/fields/cc_field.rb +55 -0
  36. data/lib/mail/fields/comments_field.rb +41 -0
  37. data/lib/mail/fields/common/address_container.rb +16 -0
  38. data/lib/mail/fields/common/common_address.rb +125 -0
  39. data/lib/mail/fields/common/common_date.rb +42 -0
  40. data/lib/mail/fields/common/common_field.rb +50 -0
  41. data/lib/mail/fields/common/common_message_id.rb +44 -0
  42. data/lib/mail/fields/common/parameter_hash.rb +58 -0
  43. data/lib/mail/fields/content_description_field.rb +19 -0
  44. data/lib/mail/fields/content_disposition_field.rb +69 -0
  45. data/lib/mail/fields/content_id_field.rb +63 -0
  46. data/lib/mail/fields/content_location_field.rb +42 -0
  47. data/lib/mail/fields/content_transfer_encoding_field.rb +50 -0
  48. data/lib/mail/fields/content_type_field.rb +198 -0
  49. data/lib/mail/fields/date_field.rb +55 -0
  50. data/lib/mail/fields/from_field.rb +55 -0
  51. data/lib/mail/fields/in_reply_to_field.rb +55 -0
  52. data/lib/mail/fields/keywords_field.rb +44 -0
  53. data/lib/mail/fields/message_id_field.rb +83 -0
  54. data/lib/mail/fields/mime_version_field.rb +53 -0
  55. data/lib/mail/fields/optional_field.rb +13 -0
  56. data/lib/mail/fields/received_field.rb +67 -0
  57. data/lib/mail/fields/references_field.rb +55 -0
  58. data/lib/mail/fields/reply_to_field.rb +55 -0
  59. data/lib/mail/fields/resent_bcc_field.rb +55 -0
  60. data/lib/mail/fields/resent_cc_field.rb +55 -0
  61. data/lib/mail/fields/resent_date_field.rb +35 -0
  62. data/lib/mail/fields/resent_from_field.rb +55 -0
  63. data/lib/mail/fields/resent_message_id_field.rb +34 -0
  64. data/lib/mail/fields/resent_sender_field.rb +62 -0
  65. data/lib/mail/fields/resent_to_field.rb +55 -0
  66. data/lib/mail/fields/return_path_field.rb +64 -0
  67. data/lib/mail/fields/sender_field.rb +67 -0
  68. data/lib/mail/fields/structured_field.rb +51 -0
  69. data/lib/mail/fields/subject_field.rb +16 -0
  70. data/lib/mail/fields/to_field.rb +55 -0
  71. data/lib/mail/fields/unstructured_field.rb +179 -0
  72. data/lib/mail/fields.rb +35 -0
  73. data/lib/mail/header.rb +264 -0
  74. data/lib/mail/mail.rb +255 -0
  75. data/lib/mail/message.rb +1972 -0
  76. data/lib/mail/network/delivery_methods/file_delivery.rb +40 -0
  77. data/lib/mail/network/delivery_methods/sendmail.rb +62 -0
  78. data/lib/mail/network/delivery_methods/smtp.rb +136 -0
  79. data/lib/mail/network/delivery_methods/test_mailer.rb +40 -0
  80. data/lib/mail/network/retriever_methods/imap.rb +213 -0
  81. data/lib/mail/network/retriever_methods/pop3.rb +194 -0
  82. data/lib/mail/network/retriever_methods/test_retriever.rb +31 -0
  83. data/lib/mail/network.rb +10 -0
  84. data/lib/mail/parsers/address_lists.rb +64 -0
  85. data/lib/mail/parsers/address_lists.treetop +19 -0
  86. data/lib/mail/parsers/content_disposition.rb +535 -0
  87. data/lib/mail/parsers/content_disposition.treetop +46 -0
  88. data/lib/mail/parsers/content_location.rb +139 -0
  89. data/lib/mail/parsers/content_location.treetop +20 -0
  90. data/lib/mail/parsers/content_transfer_encoding.rb +162 -0
  91. data/lib/mail/parsers/content_transfer_encoding.treetop +20 -0
  92. data/lib/mail/parsers/content_type.rb +967 -0
  93. data/lib/mail/parsers/content_type.treetop +68 -0
  94. data/lib/mail/parsers/date_time.rb +114 -0
  95. data/lib/mail/parsers/date_time.treetop +11 -0
  96. data/lib/mail/parsers/envelope_from.rb +194 -0
  97. data/lib/mail/parsers/envelope_from.treetop +32 -0
  98. data/lib/mail/parsers/message_ids.rb +45 -0
  99. data/lib/mail/parsers/message_ids.treetop +15 -0
  100. data/lib/mail/parsers/mime_version.rb +144 -0
  101. data/lib/mail/parsers/mime_version.treetop +19 -0
  102. data/lib/mail/parsers/phrase_lists.rb +45 -0
  103. data/lib/mail/parsers/phrase_lists.treetop +15 -0
  104. data/lib/mail/parsers/received.rb +71 -0
  105. data/lib/mail/parsers/received.treetop +11 -0
  106. data/lib/mail/parsers/rfc2045.rb +464 -0
  107. data/lib/mail/parsers/rfc2045.treetop +36 -0
  108. data/lib/mail/parsers/rfc2822.rb +5318 -0
  109. data/lib/mail/parsers/rfc2822.treetop +410 -0
  110. data/lib/mail/parsers/rfc2822_obsolete.rb +3757 -0
  111. data/lib/mail/parsers/rfc2822_obsolete.treetop +241 -0
  112. data/lib/mail/part.rb +116 -0
  113. data/lib/mail/parts_list.rb +43 -0
  114. data/lib/mail/patterns.rb +34 -0
  115. data/lib/mail/utilities.rb +211 -0
  116. data/lib/mail/version.rb +24 -0
  117. data/lib/mail/version_specific/ruby_1_8.rb +97 -0
  118. data/lib/mail/version_specific/ruby_1_9.rb +87 -0
  119. data/lib/mail.rb +80 -0
  120. data/lib/tasks/corpus.rake +125 -0
  121. data/lib/tasks/treetop.rake +10 -0
  122. metadata +255 -0
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+ #
3
+ # keywords = "Keywords:" phrase *("," phrase) CRLF
4
+ module Mail
5
+ class KeywordsField < StructuredField
6
+
7
+ FIELD_NAME = 'keywords'
8
+ CAPITALIZED_FIELD = 'Keywords'
9
+
10
+ def initialize(value = nil, charset = 'utf-8')
11
+ self.charset = charset
12
+ super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
13
+ self.parse
14
+ self
15
+ end
16
+
17
+ def parse(val = value)
18
+ unless val.blank?
19
+ @phrase_list ||= PhraseList.new(value)
20
+ end
21
+ end
22
+
23
+ def phrase_list
24
+ @phrase_list ||= PhraseList.new(value)
25
+ end
26
+
27
+ def keywords
28
+ phrase_list.phrases
29
+ end
30
+
31
+ def encoded
32
+ "#{CAPITALIZED_FIELD}: #{keywords.join(', ')}\r\n"
33
+ end
34
+
35
+ def decoded
36
+ keywords.join(', ')
37
+ end
38
+
39
+ def default
40
+ keywords
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,83 @@
1
+ # encoding: utf-8
2
+ #
3
+ # = Message-ID Field
4
+ #
5
+ # The Message-ID field inherits from StructuredField and handles the
6
+ # Message-ID: header field in the email.
7
+ #
8
+ # Sending message_id to a mail message will instantiate a Mail::Field object that
9
+ # has a MessageIdField as it's field type. This includes all Mail::CommonMessageId
10
+ # module instance metods.
11
+ #
12
+ # Only one MessageId field can appear in a header, and syntactically it can only have
13
+ # one Message ID. The message_ids method call has been left in however as it will only
14
+ # return the one message id, ie, an array of length 1.
15
+ #
16
+ # Note that, the #message_ids method will return an array of message IDs without the
17
+ # enclosing angle brackets which per RFC are not syntactically part of the message id.
18
+ #
19
+ # == Examples:
20
+ #
21
+ # mail = Mail.new
22
+ # mail.message_id = '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
23
+ # mail.message_id #=> '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
24
+ # mail[:message_id] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::MessageIdField:0x180e1c4
25
+ # mail['message_id'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::MessageIdField:0x180e1c4
26
+ # mail['Message-ID'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::MessageIdField:0x180e1c4
27
+ #
28
+ # mail[:message_id].message_id #=> 'F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom'
29
+ # mail[:message_id].message_ids #=> ['F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom']
30
+ #
31
+ require 'mail/fields/common/common_message_id'
32
+
33
+ module Mail
34
+ class MessageIdField < StructuredField
35
+
36
+ include Mail::CommonMessageId
37
+
38
+ FIELD_NAME = 'message-id'
39
+ CAPITALIZED_FIELD = 'Message-ID'
40
+
41
+ def initialize(value = nil, charset = 'utf-8')
42
+ self.charset = charset
43
+ @uniq = 1
44
+ if value.blank?
45
+ self.name = CAPITALIZED_FIELD
46
+ self.value = generate_message_id
47
+ else
48
+ super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
49
+ end
50
+ self.parse
51
+ self
52
+
53
+ end
54
+
55
+ def name
56
+ 'Message-ID'
57
+ end
58
+
59
+ def message_ids
60
+ [message_id]
61
+ end
62
+
63
+ def to_s
64
+ "<#{message_id}>"
65
+ end
66
+
67
+ def encoded
68
+ do_encode(CAPITALIZED_FIELD)
69
+ end
70
+
71
+ def decoded
72
+ do_decode
73
+ end
74
+
75
+ private
76
+
77
+ def generate_message_id
78
+ fqdn = ::Socket.gethostname
79
+ "<#{Mail.random_tag}@#{fqdn}.mail>"
80
+ end
81
+
82
+ end
83
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+ #
3
+ #
4
+ #
5
+ module Mail
6
+ class MimeVersionField < StructuredField
7
+
8
+ FIELD_NAME = 'mime-version'
9
+ CAPITALIZED_FIELD = 'Mime-Version'
10
+
11
+ def initialize(value = nil, charset = 'utf-8')
12
+ self.charset = charset
13
+ if value.blank?
14
+ value = '1.0'
15
+ end
16
+ super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
17
+ self.parse
18
+ self
19
+
20
+ end
21
+
22
+ def parse(val = value)
23
+ unless val.blank?
24
+ @element = Mail::MimeVersionElement.new(val)
25
+ end
26
+ end
27
+
28
+ def element
29
+ @element ||= Mail::MimeVersionElement.new(value)
30
+ end
31
+
32
+ def version
33
+ "#{element.major}.#{element.minor}"
34
+ end
35
+
36
+ def major
37
+ element.major.to_i
38
+ end
39
+
40
+ def minor
41
+ element.minor.to_i
42
+ end
43
+
44
+ def encoded
45
+ "#{CAPITALIZED_FIELD}: #{version}\r\n"
46
+ end
47
+
48
+ def decoded
49
+ version
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+ #
3
+ # The field names of any optional-field MUST NOT be identical to any
4
+ # field name specified elsewhere in this standard.
5
+ #
6
+ # optional-field = field-name ":" unstructured CRLF
7
+ require 'mail/fields/unstructured_field'
8
+
9
+ module Mail
10
+ class OptionalField < UnstructuredField
11
+
12
+ end
13
+ end
@@ -0,0 +1,67 @@
1
+ # encoding: utf-8
2
+ #
3
+ # trace = [return]
4
+ # 1*received
5
+ #
6
+ # return = "Return-Path:" path CRLF
7
+ #
8
+ # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) /
9
+ # obs-path
10
+ #
11
+ # received = "Received:" name-val-list ";" date-time CRLF
12
+ #
13
+ # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)]
14
+ #
15
+ # name-val-pair = item-name CFWS item-value
16
+ #
17
+ # item-name = ALPHA *(["-"] (ALPHA / DIGIT))
18
+ #
19
+ # item-value = 1*angle-addr / addr-spec /
20
+ # atom / domain / msg-id
21
+ #
22
+ module Mail
23
+ class ReceivedField < StructuredField
24
+
25
+ FIELD_NAME = 'received'
26
+ CAPITALIZED_FIELD = 'Received'
27
+
28
+ def initialize(value = nil, charset = 'utf-8')
29
+ self.charset = charset
30
+ super(CAPITALIZED_FIELD, strip_field(FIELD_NAME, value), charset)
31
+ self.parse
32
+ self
33
+
34
+ end
35
+
36
+ def parse(val = value)
37
+ unless val.blank?
38
+ @element = Mail::ReceivedElement.new(val)
39
+ end
40
+ end
41
+
42
+ def element
43
+ @element ||= Mail::ReceivedElement.new(value)
44
+ end
45
+
46
+ def date_time
47
+ @datetime ||= ::DateTime.parse("#{element.date_time}")
48
+ end
49
+
50
+ def info
51
+ element.info
52
+ end
53
+
54
+ def formatted_date
55
+ date_time.strftime("%a, %d %b %Y %H:%M:%S ") + date_time.zone.delete(':')
56
+ end
57
+
58
+ def encoded
59
+ "#{CAPITALIZED_FIELD}: #{info}; #{formatted_date}\r\n"
60
+ end
61
+
62
+ def decoded
63
+ "#{info}; #{formatted_date}"
64
+ end
65
+
66
+ end
67
+ end
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ #
3
+ # = References Field
4
+ #
5
+ # The References field inherits references StructuredField and handles the References: header
6
+ # field in the email.
7
+ #
8
+ # Sending references to a mail message will instantiate a Mail::Field object that
9
+ # has a ReferencesField as it's field type. This includes all Mail::CommonAddress
10
+ # module instance metods.
11
+ #
12
+ # Note that, the #message_ids method will return an array of message IDs without the
13
+ # enclosing angle brackets which per RFC are not syntactically part of the message id.
14
+ #
15
+ # Only one References field can appear in a header, though it can have multiple
16
+ # Message IDs.
17
+ #
18
+ # == Examples:
19
+ #
20
+ # mail = Mail.new
21
+ # mail.references = '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
22
+ # mail.references #=> '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
23
+ # mail[:references] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
24
+ # mail['references'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
25
+ # mail['References'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
26
+ #
27
+ # mail[:references].message_ids #=> ['F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom']
28
+ #
29
+ require 'mail/fields/common/common_message_id'
30
+
31
+ module Mail
32
+ class ReferencesField < StructuredField
33
+
34
+ include CommonMessageId
35
+
36
+ FIELD_NAME = 'references'
37
+ CAPITALIZED_FIELD = 'References'
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
+
54
+ end
55
+ end
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ #
3
+ # = Reply-To Field
4
+ #
5
+ # The Reply-To field inherits reply-to StructuredField and handles the Reply-To: header
6
+ # field in the email.
7
+ #
8
+ # Sending reply_to to a mail message will instantiate a Mail::Field object that
9
+ # has a ReplyToField as it's field type. This includes all Mail::CommonAddress
10
+ # module instance metods.
11
+ #
12
+ # Only one Reply-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.reply_to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
19
+ # mail.reply_to #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
20
+ # mail[:reply_to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
21
+ # mail['reply-to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
22
+ # mail['Reply-To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
23
+ #
24
+ # mail[:reply_to].encoded #=> 'Reply-To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
25
+ # mail[:reply_to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
26
+ # mail[:reply_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
27
+ # mail[:reply_to].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
28
+ #
29
+ require 'mail/fields/common/common_address'
30
+
31
+ module Mail
32
+ class ReplyToField < StructuredField
33
+
34
+ include Mail::CommonAddress
35
+
36
+ FIELD_NAME = 'reply-to'
37
+ CAPITALIZED_FIELD = 'Reply-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
+
54
+ end
55
+ end
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ #
3
+ # = Resent-Bcc Field
4
+ #
5
+ # The Resent-Bcc field inherits resent-bcc StructuredField and handles the
6
+ # Resent-Bcc: header field in the email.
7
+ #
8
+ # Sending resent_bcc to a mail message will instantiate a Mail::Field object that
9
+ # has a ResentBccField as it's field type. This includes all Mail::CommonAddress
10
+ # module instance metods.
11
+ #
12
+ # Only one Resent-Bcc 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_bcc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
19
+ # mail.resent_bcc #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
20
+ # mail[:resent_bcc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
21
+ # mail['resent-bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
22
+ # mail['Resent-Bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
23
+ #
24
+ # mail[:resent_bcc].encoded #=> 'Resent-Bcc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
25
+ # mail[:resent_bcc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
26
+ # mail[:resent_bcc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
27
+ # mail[:resent_bcc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
28
+ #
29
+ require 'mail/fields/common/common_address'
30
+
31
+ module Mail
32
+ class ResentBccField < StructuredField
33
+
34
+ include Mail::CommonAddress
35
+
36
+ FIELD_NAME = 'resent-bcc'
37
+ CAPITALIZED_FIELD = 'Resent-Bcc'
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
+
54
+ end
55
+ end
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ #
3
+ # = Resent-Cc Field
4
+ #
5
+ # The Resent-Cc field inherits resent-cc StructuredField and handles the Resent-Cc: header
6
+ # field in the email.
7
+ #
8
+ # Sending resent_cc to a mail message will instantiate a Mail::Field object that
9
+ # has a ResentCcField as it's field type. This includes all Mail::CommonAddress
10
+ # module instance metods.
11
+ #
12
+ # Only one Resent-Cc 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_cc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
19
+ # mail.resent_cc #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
20
+ # mail[:resent_cc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
21
+ # mail['resent-cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
22
+ # mail['Resent-Cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
23
+ #
24
+ # mail[:resent_cc].encoded #=> 'Resent-Cc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
25
+ # mail[:resent_cc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
26
+ # mail[:resent_cc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
27
+ # mail[:resent_cc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
28
+ #
29
+ require 'mail/fields/common/common_address'
30
+
31
+ module Mail
32
+ class ResentCcField < StructuredField
33
+
34
+ include Mail::CommonAddress
35
+
36
+ FIELD_NAME = 'resent-cc'
37
+ CAPITALIZED_FIELD = 'Resent-Cc'
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
+
54
+ end
55
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ #
3
+ # resent-date = "Resent-Date:" date-time CRLF
4
+ require 'mail/fields/common/common_date'
5
+
6
+ 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 = Time.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
+
34
+ end
35
+ end
@@ -0,0 +1,55 @@
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 it's 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 Lindsaar <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'
30
+
31
+ 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
+
54
+ end
55
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+ #
3
+ # resent-msg-id = "Resent-Message-ID:" msg-id CRLF
4
+ require 'mail/fields/common/common_message_id'
5
+
6
+ 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
+
33
+ end
34
+ end
@@ -0,0 +1,62 @@
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 it's 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 #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
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'
29
+
30
+ 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
+ result = 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
+
61
+ end
62
+ end