mail 2.6.4 → 2.9.0
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 +5 -5
- data/README.md +208 -156
- data/lib/mail/attachments_list.rb +13 -10
- data/lib/mail/body.rb +96 -107
- data/lib/mail/configuration.rb +2 -0
- data/lib/mail/constants.rb +27 -5
- data/lib/mail/elements/address.rb +61 -50
- data/lib/mail/elements/address_list.rb +11 -19
- data/lib/mail/elements/content_disposition_element.rb +9 -16
- data/lib/mail/elements/content_location_element.rb +6 -11
- data/lib/mail/elements/content_transfer_encoding_element.rb +6 -11
- data/lib/mail/elements/content_type_element.rb +16 -23
- data/lib/mail/elements/date_time_element.rb +7 -15
- data/lib/mail/elements/envelope_from_element.rb +22 -23
- data/lib/mail/elements/message_ids_element.rb +18 -13
- data/lib/mail/elements/mime_version_element.rb +7 -15
- data/lib/mail/elements/phrase_list.rb +12 -10
- data/lib/mail/elements/received_element.rb +27 -19
- data/lib/mail/encodings/7bit.rb +9 -14
- data/lib/mail/encodings/8bit.rb +2 -21
- data/lib/mail/encodings/base64.rb +11 -12
- data/lib/mail/encodings/binary.rb +3 -22
- data/lib/mail/encodings/identity.rb +24 -0
- data/lib/mail/encodings/quoted_printable.rb +6 -6
- data/lib/mail/encodings/transfer_encoding.rb +38 -29
- data/lib/mail/encodings/unix_to_unix.rb +4 -2
- data/lib/mail/encodings.rb +83 -56
- data/lib/mail/envelope.rb +11 -14
- data/lib/mail/field.rb +181 -130
- data/lib/mail/field_list.rb +61 -8
- data/lib/mail/fields/bcc_field.rb +33 -52
- data/lib/mail/fields/cc_field.rb +27 -49
- data/lib/mail/fields/comments_field.rb +26 -37
- data/lib/mail/fields/common_address_field.rb +162 -0
- data/lib/mail/fields/common_date_field.rb +56 -0
- data/lib/mail/fields/common_field.rb +77 -0
- data/lib/mail/fields/common_message_id_field.rb +41 -0
- data/lib/mail/fields/content_description_field.rb +6 -14
- data/lib/mail/fields/content_disposition_field.rb +11 -38
- data/lib/mail/fields/content_id_field.rb +23 -51
- data/lib/mail/fields/content_location_field.rb +10 -25
- data/lib/mail/fields/content_transfer_encoding_field.rb +30 -31
- data/lib/mail/fields/content_type_field.rb +53 -84
- data/lib/mail/fields/date_field.rb +22 -52
- data/lib/mail/fields/from_field.rb +27 -49
- data/lib/mail/fields/in_reply_to_field.rb +37 -49
- data/lib/mail/fields/keywords_field.rb +17 -31
- data/lib/mail/fields/message_id_field.rb +24 -71
- data/lib/mail/fields/mime_version_field.rb +18 -30
- data/lib/mail/fields/named_structured_field.rb +10 -0
- data/lib/mail/fields/named_unstructured_field.rb +10 -0
- data/lib/mail/fields/optional_field.rb +9 -8
- data/lib/mail/fields/{common/parameter_hash.rb → parameter_hash.rb} +13 -11
- data/lib/mail/fields/received_field.rb +42 -57
- data/lib/mail/fields/references_field.rb +34 -49
- data/lib/mail/fields/reply_to_field.rb +27 -49
- data/lib/mail/fields/resent_bcc_field.rb +27 -49
- data/lib/mail/fields/resent_cc_field.rb +27 -49
- data/lib/mail/fields/resent_date_field.rb +4 -30
- data/lib/mail/fields/resent_from_field.rb +27 -49
- data/lib/mail/fields/resent_message_id_field.rb +4 -29
- data/lib/mail/fields/resent_sender_field.rb +26 -56
- data/lib/mail/fields/resent_to_field.rb +27 -49
- data/lib/mail/fields/return_path_field.rb +49 -54
- data/lib/mail/fields/sender_field.rb +33 -55
- data/lib/mail/fields/structured_field.rb +2 -30
- data/lib/mail/fields/subject_field.rb +8 -11
- data/lib/mail/fields/to_field.rb +27 -49
- data/lib/mail/fields/unstructured_field.rb +31 -47
- data/lib/mail/fields.rb +9 -0
- data/lib/mail/header.rb +71 -110
- data/lib/mail/mail.rb +34 -37
- data/lib/mail/matchers/attachment_matchers.rb +15 -0
- data/lib/mail/matchers/has_sent_mail.rb +21 -1
- data/lib/mail/message.rb +126 -127
- data/lib/mail/multibyte/chars.rb +24 -181
- data/lib/mail/multibyte/unicode.rb +11 -11
- data/lib/mail/multibyte/utils.rb +26 -43
- data/lib/mail/multibyte.rb +55 -16
- data/lib/mail/network/delivery_methods/exim.rb +8 -11
- data/lib/mail/network/delivery_methods/file_delivery.rb +15 -18
- data/lib/mail/network/delivery_methods/logger_delivery.rb +34 -0
- data/lib/mail/network/delivery_methods/sendmail.rb +32 -35
- data/lib/mail/network/delivery_methods/smtp.rb +125 -68
- data/lib/mail/network/delivery_methods/smtp_connection.rb +11 -16
- data/lib/mail/network/delivery_methods/test_mailer.rb +12 -13
- data/lib/mail/network/retriever_methods/base.rb +13 -13
- data/lib/mail/network/retriever_methods/imap.rb +25 -9
- data/lib/mail/network/retriever_methods/pop3.rb +25 -23
- data/lib/mail/network/retriever_methods/test_retriever.rb +3 -2
- data/lib/mail/network.rb +1 -0
- data/lib/mail/parser_tools.rb +15 -0
- data/lib/mail/parsers/address_lists_parser.rb +33228 -116
- data/lib/mail/parsers/address_lists_parser.rl +183 -0
- data/lib/mail/parsers/content_disposition_parser.rb +885 -49
- data/lib/mail/parsers/content_disposition_parser.rl +93 -0
- data/lib/mail/parsers/content_location_parser.rb +812 -23
- data/lib/mail/parsers/content_location_parser.rl +82 -0
- data/lib/mail/parsers/content_transfer_encoding_parser.rb +512 -21
- data/lib/mail/parsers/content_transfer_encoding_parser.rl +75 -0
- data/lib/mail/parsers/content_type_parser.rb +1039 -55
- data/lib/mail/parsers/content_type_parser.rl +94 -0
- data/lib/mail/parsers/date_time_parser.rb +880 -25
- data/lib/mail/parsers/date_time_parser.rl +73 -0
- data/lib/mail/parsers/envelope_from_parser.rb +3672 -40
- data/lib/mail/parsers/envelope_from_parser.rl +93 -0
- data/lib/mail/parsers/message_ids_parser.rb +5149 -25
- data/lib/mail/parsers/message_ids_parser.rl +97 -0
- data/lib/mail/parsers/mime_version_parser.rb +500 -26
- data/lib/mail/parsers/mime_version_parser.rl +72 -0
- data/lib/mail/parsers/phrase_lists_parser.rb +873 -22
- data/lib/mail/parsers/phrase_lists_parser.rl +94 -0
- data/lib/mail/parsers/received_parser.rb +8779 -43
- data/lib/mail/parsers/received_parser.rl +95 -0
- data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +13 -0
- data/lib/mail/parsers/rfc2045_content_type.rl +25 -0
- data/lib/mail/parsers/rfc2045_mime.rl +16 -0
- data/lib/mail/parsers/rfc2183_content_disposition.rl +15 -0
- data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
- data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +22 -0
- data/lib/mail/parsers/rfc5322.rl +74 -0
- data/lib/mail/parsers/rfc5322_address.rl +72 -0
- data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +8 -1
- data/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
- data/lib/mail/parsers.rb +11 -25
- data/lib/mail/part.rb +25 -29
- data/lib/mail/parts_list.rb +62 -6
- data/lib/mail/smtp_envelope.rb +57 -0
- data/lib/mail/utilities.rb +361 -74
- data/lib/mail/version.rb +2 -2
- data/lib/mail/yaml.rb +30 -0
- data/lib/mail.rb +4 -37
- metadata +125 -67
- data/CHANGELOG.rdoc +0 -787
- data/CONTRIBUTING.md +0 -60
- data/Dependencies.txt +0 -2
- data/Gemfile +0 -11
- data/Rakefile +0 -29
- data/TODO.rdoc +0 -9
- data/lib/mail/check_delivery_params.rb +0 -21
- data/lib/mail/core_extensions/smtp.rb +0 -25
- data/lib/mail/core_extensions/string/access.rb +0 -146
- data/lib/mail/core_extensions/string/multibyte.rb +0 -79
- data/lib/mail/core_extensions/string.rb +0 -21
- data/lib/mail/fields/common/address_container.rb +0 -17
- data/lib/mail/fields/common/common_address.rb +0 -136
- data/lib/mail/fields/common/common_date.rb +0 -36
- data/lib/mail/fields/common/common_field.rb +0 -61
- data/lib/mail/fields/common/common_message_id.rb +0 -49
- data/lib/mail/multibyte/exceptions.rb +0 -9
- data/lib/mail/parsers/ragel/common.rl +0 -185
- data/lib/mail/parsers/ragel/parser_info.rb +0 -61
- data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
- data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
- data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
- data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
- data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
- data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
- data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
- data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
- data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
- data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
- data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
- data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
- data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
- data/lib/mail/parsers/ragel/ruby.rb +0 -40
- data/lib/mail/parsers/ragel.rb +0 -18
- data/lib/mail/version_specific/ruby_1_8.rb +0 -126
- data/lib/mail/version_specific/ruby_1_9.rb +0 -223
|
@@ -6,9 +6,9 @@ module Mail
|
|
|
6
6
|
# Each email retrieved (RFC2822) is given as an instance of +Message+.
|
|
7
7
|
#
|
|
8
8
|
# While being retrieved, emails can be yielded if a block is given.
|
|
9
|
-
#
|
|
9
|
+
#
|
|
10
10
|
# === Example of retrieving Emails from GMail:
|
|
11
|
-
#
|
|
11
|
+
#
|
|
12
12
|
# Mail.defaults do
|
|
13
13
|
# retriever_method :pop3, { :address => "pop.gmail.com",
|
|
14
14
|
# :port => 995,
|
|
@@ -16,22 +16,22 @@ module Mail
|
|
|
16
16
|
# :password => '<password>',
|
|
17
17
|
# :enable_ssl => true }
|
|
18
18
|
# end
|
|
19
|
-
#
|
|
19
|
+
#
|
|
20
20
|
# Mail.all #=> Returns an array of all emails
|
|
21
21
|
# Mail.first #=> Returns the first unread email
|
|
22
22
|
# Mail.last #=> Returns the last unread email
|
|
23
|
-
#
|
|
23
|
+
#
|
|
24
24
|
# You can also pass options into Mail.find to locate an email in your pop mailbox
|
|
25
25
|
# with the following options:
|
|
26
|
-
#
|
|
26
|
+
#
|
|
27
27
|
# what: last or first emails. The default is :first.
|
|
28
28
|
# order: order of emails returned. Possible values are :asc or :desc. Default value is :asc.
|
|
29
29
|
# count: number of emails to retrieve. The default value is 10. A value of 1 returns an
|
|
30
30
|
# instance of Message, not an array of Message instances.
|
|
31
|
-
#
|
|
31
|
+
#
|
|
32
32
|
# Mail.find(:what => :first, :count => 10, :order => :asc)
|
|
33
33
|
# #=> Returns the first 10 emails in ascending order
|
|
34
|
-
#
|
|
34
|
+
#
|
|
35
35
|
class POP3 < Retriever
|
|
36
36
|
require 'net/pop' unless defined?(Net::POP)
|
|
37
37
|
|
|
@@ -41,11 +41,12 @@ module Mail
|
|
|
41
41
|
:user_name => nil,
|
|
42
42
|
:password => nil,
|
|
43
43
|
:authentication => nil,
|
|
44
|
-
:enable_ssl => false
|
|
44
|
+
:enable_ssl => false,
|
|
45
|
+
:read_timeout => nil }.merge!(values)
|
|
45
46
|
end
|
|
46
|
-
|
|
47
|
+
|
|
47
48
|
attr_accessor :settings
|
|
48
|
-
|
|
49
|
+
|
|
49
50
|
# Find emails in a POP3 mailbox. Without any options, the 5 last received emails are returned.
|
|
50
51
|
#
|
|
51
52
|
# Possible options:
|
|
@@ -56,20 +57,20 @@ module Mail
|
|
|
56
57
|
# delete_after_find: flag for whether to delete each retreived email after find. Default
|
|
57
58
|
# is false. Use #find_and_delete if you would like this to default to true.
|
|
58
59
|
#
|
|
59
|
-
def find(options =
|
|
60
|
+
def find(options = nil, &block)
|
|
60
61
|
options = validate_options(options)
|
|
61
|
-
|
|
62
|
+
|
|
62
63
|
start do |pop3|
|
|
63
64
|
mails = pop3.mails
|
|
64
65
|
pop3.reset # Clears all "deleted" marks. This prevents non-explicit/accidental deletions due to server settings.
|
|
65
66
|
mails.sort! { |m1, m2| m2.number <=> m1.number } if options[:what] == :last
|
|
66
67
|
mails = mails.first(options[:count]) if options[:count].is_a? Integer
|
|
67
|
-
|
|
68
|
+
|
|
68
69
|
if options[:what].to_sym == :last && options[:order].to_sym == :desc ||
|
|
69
70
|
options[:what].to_sym == :first && options[:order].to_sym == :asc ||
|
|
70
71
|
mails.reverse!
|
|
71
72
|
end
|
|
72
|
-
|
|
73
|
+
|
|
73
74
|
if block_given?
|
|
74
75
|
mails.each do |mail|
|
|
75
76
|
new_message = Mail.new(mail.pop)
|
|
@@ -85,11 +86,11 @@ module Mail
|
|
|
85
86
|
end
|
|
86
87
|
emails.size == 1 && options[:count] == 1 ? emails.first : emails
|
|
87
88
|
end
|
|
88
|
-
|
|
89
|
+
|
|
89
90
|
end
|
|
90
91
|
end
|
|
91
|
-
|
|
92
|
-
# Delete all emails from a POP3 server
|
|
92
|
+
|
|
93
|
+
# Delete all emails from a POP3 server
|
|
93
94
|
def delete_all
|
|
94
95
|
start do |pop3|
|
|
95
96
|
unless pop3.mails.empty?
|
|
@@ -107,29 +108,30 @@ module Mail
|
|
|
107
108
|
yield pop3
|
|
108
109
|
end
|
|
109
110
|
end
|
|
110
|
-
|
|
111
|
+
|
|
111
112
|
private
|
|
112
|
-
|
|
113
|
+
|
|
113
114
|
# Set default options
|
|
114
115
|
def validate_options(options)
|
|
115
|
-
options
|
|
116
|
+
options = options ? Hash[options] : {}
|
|
116
117
|
options[:count] ||= 10
|
|
117
118
|
options[:order] ||= :asc
|
|
118
119
|
options[:what] ||= :first
|
|
119
120
|
options[:delete_after_find] ||= false
|
|
120
121
|
options
|
|
121
122
|
end
|
|
122
|
-
|
|
123
|
+
|
|
123
124
|
# Start a POP3 session and ensure that it will be closed in any case. Any messages
|
|
124
125
|
# marked for deletion via #find_and_delete or with the :delete_after_find option
|
|
125
126
|
# will be deleted when the session is closed.
|
|
126
127
|
def start(config = Configuration.instance, &block)
|
|
127
128
|
raise ArgumentError.new("Mail::Retrievable#pop3_start takes a block") unless block_given?
|
|
128
|
-
|
|
129
|
+
|
|
129
130
|
pop3 = Net::POP3.new(settings[:address], settings[:port], false)
|
|
130
131
|
pop3.enable_ssl(OpenSSL::SSL::VERIFY_NONE) if settings[:enable_ssl]
|
|
132
|
+
pop3.read_timeout = settings[:read_timeout] if settings[:read_timeout]
|
|
131
133
|
pop3.start(settings[:user_name], settings[:password])
|
|
132
|
-
|
|
134
|
+
|
|
133
135
|
yield pop3
|
|
134
136
|
ensure
|
|
135
137
|
if defined?(pop3) && pop3 && pop3.started?
|
|
@@ -17,7 +17,8 @@ module Mail
|
|
|
17
17
|
@@emails = []
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
def find(options =
|
|
20
|
+
def find(options = nil, &block)
|
|
21
|
+
options = options ? Hash[options] : {}
|
|
21
22
|
options[:count] ||= :all
|
|
22
23
|
options[:order] ||= :asc
|
|
23
24
|
options[:what] ||= :first
|
|
@@ -25,7 +26,7 @@ module Mail
|
|
|
25
26
|
emails_index.reverse! if options[:what] == :last
|
|
26
27
|
emails_index = case count = options[:count]
|
|
27
28
|
when :all then emails_index
|
|
28
|
-
when
|
|
29
|
+
when Integer then emails_index[0, count]
|
|
29
30
|
else
|
|
30
31
|
raise 'Invalid count option value: ' + count.inspect
|
|
31
32
|
end
|
data/lib/mail/network.rb
CHANGED
|
@@ -4,6 +4,7 @@ require 'mail/network/retriever_methods/base'
|
|
|
4
4
|
module Mail
|
|
5
5
|
register_autoload :SMTP, 'mail/network/delivery_methods/smtp'
|
|
6
6
|
register_autoload :FileDelivery, 'mail/network/delivery_methods/file_delivery'
|
|
7
|
+
register_autoload :LoggerDelivery, 'mail/network/delivery_methods/logger_delivery'
|
|
7
8
|
register_autoload :Sendmail, 'mail/network/delivery_methods/sendmail'
|
|
8
9
|
register_autoload :Exim, 'mail/network/delivery_methods/exim'
|
|
9
10
|
register_autoload :SMTPConnection, 'mail/network/delivery_methods/smtp_connection'
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Mail
|
|
2
|
+
# Extends each field parser with utility methods.
|
|
3
|
+
module ParserTools #:nodoc:
|
|
4
|
+
# Slice bytes from ASCII-8BIT data and mark as UTF-8.
|
|
5
|
+
if 'string'.respond_to?(:force_encoding)
|
|
6
|
+
def chars(data, from_bytes, to_bytes)
|
|
7
|
+
data.slice(from_bytes..to_bytes).force_encoding(Encoding::UTF_8)
|
|
8
|
+
end
|
|
9
|
+
else
|
|
10
|
+
def chars(data, from_bytes, to_bytes)
|
|
11
|
+
data.slice(from_bytes..to_bytes)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|