nano-fast-tool 0.0.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.
- checksums.yaml +7 -0
- data/mail-2.9.1/MIT-LICENSE +20 -0
- data/mail-2.9.1/README.md +771 -0
- data/mail-2.9.1/lib/mail/attachments_list.rb +109 -0
- data/mail-2.9.1/lib/mail/body.rb +305 -0
- data/mail-2.9.1/lib/mail/configuration.rb +78 -0
- data/mail-2.9.1/lib/mail/constants.rb +79 -0
- data/mail-2.9.1/lib/mail/elements/address.rb +258 -0
- data/mail-2.9.1/lib/mail/elements/address_list.rb +34 -0
- data/mail-2.9.1/lib/mail/elements/content_disposition_element.rb +20 -0
- data/mail-2.9.1/lib/mail/elements/content_location_element.rb +17 -0
- data/mail-2.9.1/lib/mail/elements/content_transfer_encoding_element.rb +13 -0
- data/mail-2.9.1/lib/mail/elements/content_type_element.rb +25 -0
- data/mail-2.9.1/lib/mail/elements/date_time_element.rb +15 -0
- data/mail-2.9.1/lib/mail/elements/envelope_from_element.rb +39 -0
- data/mail-2.9.1/lib/mail/elements/message_ids_element.rb +31 -0
- data/mail-2.9.1/lib/mail/elements/mime_version_element.rb +15 -0
- data/mail-2.9.1/lib/mail/elements/phrase_list.rb +19 -0
- data/mail-2.9.1/lib/mail/elements/received_element.rb +35 -0
- data/mail-2.9.1/lib/mail/elements.rb +15 -0
- data/mail-2.9.1/lib/mail/encodings/7bit.rb +27 -0
- data/mail-2.9.1/lib/mail/encodings/8bit.rb +18 -0
- data/mail-2.9.1/lib/mail/encodings/base64.rb +38 -0
- data/mail-2.9.1/lib/mail/encodings/binary.rb +13 -0
- data/mail-2.9.1/lib/mail/encodings/identity.rb +24 -0
- data/mail-2.9.1/lib/mail/encodings/quoted_printable.rb +45 -0
- data/mail-2.9.1/lib/mail/encodings/transfer_encoding.rb +77 -0
- data/mail-2.9.1/lib/mail/encodings/unix_to_unix.rb +20 -0
- data/mail-2.9.1/lib/mail/encodings.rb +314 -0
- data/mail-2.9.1/lib/mail/envelope.rb +28 -0
- data/mail-2.9.1/lib/mail/field.rb +313 -0
- data/mail-2.9.1/lib/mail/field_list.rb +87 -0
- data/mail-2.9.1/lib/mail/fields/bcc_field.rb +49 -0
- data/mail-2.9.1/lib/mail/fields/cc_field.rb +33 -0
- data/mail-2.9.1/lib/mail/fields/comments_field.rb +31 -0
- data/mail-2.9.1/lib/mail/fields/common_address_field.rb +162 -0
- data/mail-2.9.1/lib/mail/fields/common_date_field.rb +56 -0
- data/mail-2.9.1/lib/mail/fields/common_field.rb +77 -0
- data/mail-2.9.1/lib/mail/fields/common_message_id_field.rb +41 -0
- data/mail-2.9.1/lib/mail/fields/content_description_field.rb +12 -0
- data/mail-2.9.1/lib/mail/fields/content_disposition_field.rb +44 -0
- data/mail-2.9.1/lib/mail/fields/content_id_field.rb +35 -0
- data/mail-2.9.1/lib/mail/fields/content_location_field.rb +28 -0
- data/mail-2.9.1/lib/mail/fields/content_transfer_encoding_field.rb +44 -0
- data/mail-2.9.1/lib/mail/fields/content_type_field.rb +171 -0
- data/mail-2.9.1/lib/mail/fields/date_field.rb +28 -0
- data/mail-2.9.1/lib/mail/fields/from_field.rb +33 -0
- data/mail-2.9.1/lib/mail/fields/in_reply_to_field.rb +45 -0
- data/mail-2.9.1/lib/mail/fields/keywords_field.rb +30 -0
- data/mail-2.9.1/lib/mail/fields/message_id_field.rb +36 -0
- data/mail-2.9.1/lib/mail/fields/mime_version_field.rb +42 -0
- data/mail-2.9.1/lib/mail/fields/named_structured_field.rb +10 -0
- data/mail-2.9.1/lib/mail/fields/named_unstructured_field.rb +10 -0
- data/mail-2.9.1/lib/mail/fields/optional_field.rb +15 -0
- data/mail-2.9.1/lib/mail/fields/parameter_hash.rb +61 -0
- data/mail-2.9.1/lib/mail/fields/received_field.rb +61 -0
- data/mail-2.9.1/lib/mail/fields/references_field.rb +42 -0
- data/mail-2.9.1/lib/mail/fields/reply_to_field.rb +33 -0
- data/mail-2.9.1/lib/mail/fields/resent_bcc_field.rb +33 -0
- data/mail-2.9.1/lib/mail/fields/resent_cc_field.rb +33 -0
- data/mail-2.9.1/lib/mail/fields/resent_date_field.rb +10 -0
- data/mail-2.9.1/lib/mail/fields/resent_from_field.rb +33 -0
- data/mail-2.9.1/lib/mail/fields/resent_message_id_field.rb +10 -0
- data/mail-2.9.1/lib/mail/fields/resent_sender_field.rb +32 -0
- data/mail-2.9.1/lib/mail/fields/resent_to_field.rb +33 -0
- data/mail-2.9.1/lib/mail/fields/return_path_field.rb +60 -0
- data/mail-2.9.1/lib/mail/fields/sender_field.rb +45 -0
- data/mail-2.9.1/lib/mail/fields/structured_field.rb +24 -0
- data/mail-2.9.1/lib/mail/fields/subject_field.rb +14 -0
- data/mail-2.9.1/lib/mail/fields/to_field.rb +33 -0
- data/mail-2.9.1/lib/mail/fields/unstructured_field.rb +189 -0
- data/mail-2.9.1/lib/mail/fields.rb +45 -0
- data/mail-2.9.1/lib/mail/header.rb +237 -0
- data/mail-2.9.1/lib/mail/indifferent_hash.rb +147 -0
- data/mail-2.9.1/lib/mail/mail.rb +267 -0
- data/mail-2.9.1/lib/mail/matchers/attachment_matchers.rb +44 -0
- data/mail-2.9.1/lib/mail/matchers/has_sent_mail.rb +201 -0
- data/mail-2.9.1/lib/mail/message.rb +2159 -0
- data/mail-2.9.1/lib/mail/multibyte/chars.rb +318 -0
- data/mail-2.9.1/lib/mail/multibyte/unicode.rb +405 -0
- data/mail-2.9.1/lib/mail/multibyte/utils.rb +44 -0
- data/mail-2.9.1/lib/mail/multibyte.rb +82 -0
- data/mail-2.9.1/lib/mail/network/delivery_methods/exim.rb +50 -0
- data/mail-2.9.1/lib/mail/network/delivery_methods/file_delivery.rb +43 -0
- data/mail-2.9.1/lib/mail/network/delivery_methods/logger_delivery.rb +34 -0
- data/mail-2.9.1/lib/mail/network/delivery_methods/sendmail.rb +87 -0
- data/mail-2.9.1/lib/mail/network/delivery_methods/smtp.rb +200 -0
- data/mail-2.9.1/lib/mail/network/delivery_methods/smtp_connection.rb +57 -0
- data/mail-2.9.1/lib/mail/network/delivery_methods/test_mailer.rb +44 -0
- data/mail-2.9.1/lib/mail/network/retriever_methods/base.rb +64 -0
- data/mail-2.9.1/lib/mail/network/retriever_methods/imap.rb +190 -0
- data/mail-2.9.1/lib/mail/network/retriever_methods/pop3.rb +143 -0
- data/mail-2.9.1/lib/mail/network/retriever_methods/test_retriever.rb +45 -0
- data/mail-2.9.1/lib/mail/network.rb +16 -0
- data/mail-2.9.1/lib/mail/parser_tools.rb +15 -0
- data/mail-2.9.1/lib/mail/parsers/address_lists_parser.rb +33245 -0
- data/mail-2.9.1/lib/mail/parsers/address_lists_parser.rl +183 -0
- data/mail-2.9.1/lib/mail/parsers/content_disposition_parser.rb +904 -0
- data/mail-2.9.1/lib/mail/parsers/content_disposition_parser.rl +93 -0
- data/mail-2.9.1/lib/mail/parsers/content_location_parser.rb +825 -0
- data/mail-2.9.1/lib/mail/parsers/content_location_parser.rl +82 -0
- data/mail-2.9.1/lib/mail/parsers/content_transfer_encoding_parser.rb +525 -0
- data/mail-2.9.1/lib/mail/parsers/content_transfer_encoding_parser.rl +75 -0
- data/mail-2.9.1/lib/mail/parsers/content_type_parser.rb +1051 -0
- data/mail-2.9.1/lib/mail/parsers/content_type_parser.rl +94 -0
- data/mail-2.9.1/lib/mail/parsers/date_time_parser.rb +894 -0
- data/mail-2.9.1/lib/mail/parsers/date_time_parser.rl +73 -0
- data/mail-2.9.1/lib/mail/parsers/envelope_from_parser.rb +3678 -0
- data/mail-2.9.1/lib/mail/parsers/envelope_from_parser.rl +93 -0
- data/mail-2.9.1/lib/mail/parsers/message_ids_parser.rb +5164 -0
- data/mail-2.9.1/lib/mail/parsers/message_ids_parser.rl +97 -0
- data/mail-2.9.1/lib/mail/parsers/mime_version_parser.rb +516 -0
- data/mail-2.9.1/lib/mail/parsers/mime_version_parser.rl +72 -0
- data/mail-2.9.1/lib/mail/parsers/phrase_lists_parser.rb +887 -0
- data/mail-2.9.1/lib/mail/parsers/phrase_lists_parser.rl +94 -0
- data/mail-2.9.1/lib/mail/parsers/received_parser.rb +8785 -0
- data/mail-2.9.1/lib/mail/parsers/received_parser.rl +95 -0
- data/mail-2.9.1/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +13 -0
- data/mail-2.9.1/lib/mail/parsers/rfc2045_content_type.rl +25 -0
- data/mail-2.9.1/lib/mail/parsers/rfc2045_mime.rl +16 -0
- data/mail-2.9.1/lib/mail/parsers/rfc2183_content_disposition.rl +15 -0
- data/mail-2.9.1/lib/mail/parsers/rfc3629_utf8.rl +19 -0
- data/mail-2.9.1/lib/mail/parsers/rfc5234_abnf_core_rules.rl +22 -0
- data/mail-2.9.1/lib/mail/parsers/rfc5322.rl +74 -0
- data/mail-2.9.1/lib/mail/parsers/rfc5322_address.rl +72 -0
- data/mail-2.9.1/lib/mail/parsers/rfc5322_date_time.rl +37 -0
- data/mail-2.9.1/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
- data/mail-2.9.1/lib/mail/parsers.rb +13 -0
- data/mail-2.9.1/lib/mail/part.rb +119 -0
- data/mail-2.9.1/lib/mail/parts_list.rb +131 -0
- data/mail-2.9.1/lib/mail/smtp_envelope.rb +57 -0
- data/mail-2.9.1/lib/mail/utilities.rb +576 -0
- data/mail-2.9.1/lib/mail/values/unicode_tables.dat +0 -0
- data/mail-2.9.1/lib/mail/version.rb +17 -0
- data/mail-2.9.1/lib/mail/yaml.rb +30 -0
- data/mail-2.9.1/lib/mail.rb +65 -0
- data/nano-fast-tool.gemspec +12 -0
- metadata +177 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'delegate'
|
|
3
|
+
|
|
4
|
+
module Mail
|
|
5
|
+
class PartsList < DelegateClass(Array)
|
|
6
|
+
attr_reader :parts
|
|
7
|
+
|
|
8
|
+
def initialize(*args)
|
|
9
|
+
@parts = Array.new(*args)
|
|
10
|
+
super @parts
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# The #encode_with and #to_yaml methods are just implemented
|
|
14
|
+
# for the sake of backward compatibility ; the delegator does
|
|
15
|
+
# not correctly delegate these calls to the delegated object
|
|
16
|
+
def encode_with(coder) # :nodoc:
|
|
17
|
+
coder.represent_object(nil, @parts)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def to_yaml(options = {}) # :nodoc:
|
|
21
|
+
@parts.to_yaml(options)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def attachments
|
|
25
|
+
Mail::AttachmentsList.new(@parts)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def collect
|
|
29
|
+
if block_given?
|
|
30
|
+
ary = PartsList.new
|
|
31
|
+
each { |o| ary << yield(o) }
|
|
32
|
+
ary
|
|
33
|
+
else
|
|
34
|
+
to_a
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
alias_method :map, :collect
|
|
38
|
+
|
|
39
|
+
def map!
|
|
40
|
+
raise NoMethodError, "#map! is not defined, please call #collect and create a new PartsList"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def collect!
|
|
44
|
+
raise NoMethodError, "#collect! is not defined, please call #collect and create a new PartsList"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def inspect_structure(parent_id = '')
|
|
48
|
+
enum_for(:map).with_index { |part, i|
|
|
49
|
+
i = i + 1 # Use 1-based indexes since this is for humans to read
|
|
50
|
+
id = parent_id.empty? ? "#{i}" : "#{parent_id}.#{i}"
|
|
51
|
+
if part.content_type == "message/rfc822"
|
|
52
|
+
sub_list = Mail.new(part.body).parts
|
|
53
|
+
else
|
|
54
|
+
sub_list = part.parts
|
|
55
|
+
end
|
|
56
|
+
id + '. ' + part.inspect +
|
|
57
|
+
if sub_list.any?
|
|
58
|
+
"\n" + sub_list.inspect_structure(id)
|
|
59
|
+
end.to_s
|
|
60
|
+
}.join("\n")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def recursive_each(&block)
|
|
64
|
+
each do |part|
|
|
65
|
+
if part.content_type == "message/rfc822"
|
|
66
|
+
sub_list = Mail.new(part.body).parts
|
|
67
|
+
else
|
|
68
|
+
sub_list = part.parts
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
yield part
|
|
72
|
+
|
|
73
|
+
sub_list.recursive_each(&block)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def recursive_size
|
|
78
|
+
i = 0
|
|
79
|
+
recursive_each {|p| i += 1 }
|
|
80
|
+
i
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def recursive_delete_if
|
|
84
|
+
delete_if { |part|
|
|
85
|
+
if part.content_type == "message/rfc822"
|
|
86
|
+
sub_list = Mail.new(part.body).parts
|
|
87
|
+
else
|
|
88
|
+
sub_list = part.parts
|
|
89
|
+
end
|
|
90
|
+
(yield part).tap {
|
|
91
|
+
if sub_list.any?
|
|
92
|
+
sub_list.recursive_delete_if {|part| yield part }
|
|
93
|
+
end
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def delete_attachments
|
|
99
|
+
recursive_delete_if { |part|
|
|
100
|
+
part.attachment?
|
|
101
|
+
}
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def sort
|
|
105
|
+
self.class.new(@parts.sort)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def sort!(order)
|
|
109
|
+
# stable sort should be used to maintain the relative order as the parts are added
|
|
110
|
+
i = 0;
|
|
111
|
+
sorted = @parts.sort_by do |a|
|
|
112
|
+
# OK, 10000 is arbitrary... if anyone actually wants to explicitly sort 10000 parts of a
|
|
113
|
+
# single email message... please show me a use case and I'll put more work into this method,
|
|
114
|
+
# in the meantime, it works :)
|
|
115
|
+
get_order_value(a, order) << (i += 1)
|
|
116
|
+
end
|
|
117
|
+
@parts.clear
|
|
118
|
+
sorted.each { |p| @parts << p }
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
private
|
|
122
|
+
|
|
123
|
+
def get_order_value(part, order)
|
|
124
|
+
is_attachment = part.respond_to?(:attachment?) && part.attachment?
|
|
125
|
+
has_content_type = part.respond_to?(:content_type) && !part[:content_type].nil?
|
|
126
|
+
|
|
127
|
+
[is_attachment ? 1 : 0, (has_content_type ? order.index(part[:content_type].string.downcase) : nil) || 10000]
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
end
|
|
131
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mail
|
|
4
|
+
class SmtpEnvelope #:nodoc:
|
|
5
|
+
# Reasonable cap on address length to avoid SMTP line length
|
|
6
|
+
# overflow on old SMTP servers.
|
|
7
|
+
MAX_ADDRESS_BYTESIZE = 2000
|
|
8
|
+
|
|
9
|
+
attr_reader :from, :to, :message
|
|
10
|
+
|
|
11
|
+
def initialize(mail)
|
|
12
|
+
self.from = mail.smtp_envelope_from
|
|
13
|
+
self.to = mail.smtp_envelope_to
|
|
14
|
+
self.message = mail.encoded
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def from=(addr)
|
|
18
|
+
if Utilities.blank? addr
|
|
19
|
+
raise ArgumentError, "SMTP From address may not be blank: #{addr.inspect}"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
@from = validate_addr 'From', addr
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def to=(addr)
|
|
26
|
+
if Utilities.blank?(addr)
|
|
27
|
+
raise ArgumentError, "SMTP To address may not be blank: #{addr.inspect}"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
@to = Array(addr).map do |addr|
|
|
31
|
+
validate_addr 'To', addr
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def message=(message)
|
|
36
|
+
if Utilities.blank?(message)
|
|
37
|
+
raise ArgumentError, 'SMTP message may not be blank'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
@message = message
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
def validate_addr(addr_name, addr)
|
|
46
|
+
if addr.bytesize > MAX_ADDRESS_BYTESIZE
|
|
47
|
+
raise ArgumentError, "SMTP #{addr_name} address may not exceed #{MAX_ADDRESS_BYTESIZE} bytes: #{addr.inspect}"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
if /[\r\n]/.match?(addr)
|
|
51
|
+
raise ArgumentError, "SMTP #{addr_name} address may not contain CR or LF line breaks: #{addr.inspect}"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
addr
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|