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.
- checksums.yaml +4 -4
- data/README.md +135 -59
- data/lib/mail/attachments_list.rb +5 -6
- data/lib/mail/body.rb +51 -74
- data/lib/mail/constants.rb +27 -5
- data/lib/mail/elements/address.rb +27 -27
- data/lib/mail/elements/address_list.rb +1 -1
- data/lib/mail/elements/content_disposition_element.rb +1 -1
- data/lib/mail/elements/content_location_element.rb +1 -1
- data/lib/mail/elements/content_transfer_encoding_element.rb +1 -1
- data/lib/mail/elements/content_type_element.rb +8 -4
- data/lib/mail/elements/date_time_element.rb +1 -1
- data/lib/mail/elements/envelope_from_element.rb +13 -7
- data/lib/mail/elements/message_ids_element.rb +14 -5
- data/lib/mail/elements/mime_version_element.rb +1 -1
- data/lib/mail/elements/phrase_list.rb +7 -2
- data/lib/mail/elements/received_element.rb +20 -6
- data/lib/mail/encodings/7bit.rb +5 -0
- data/lib/mail/encodings/base64.rb +2 -2
- data/lib/mail/encodings/quoted_printable.rb +2 -2
- data/lib/mail/encodings/unix_to_unix.rb +1 -1
- data/lib/mail/encodings.rb +32 -61
- data/lib/mail/envelope.rb +11 -14
- data/lib/mail/field.rb +100 -86
- 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 +49 -75
- data/lib/mail/fields/date_field.rb +22 -51
- 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 +5 -7
- data/lib/mail/fields/{common/parameter_hash.rb → parameter_hash.rb} +12 -10
- 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 -29
- 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 +15 -48
- data/lib/mail/fields.rb +9 -0
- data/lib/mail/header.rb +69 -110
- data/lib/mail/mail.rb +32 -27
- data/lib/mail/matchers/attachment_matchers.rb +15 -0
- data/lib/mail/message.rb +67 -78
- data/lib/mail/multibyte/chars.rb +9 -167
- data/lib/mail/multibyte/unicode.rb +1 -1
- data/lib/mail/multibyte/utils.rb +26 -43
- data/lib/mail/multibyte.rb +1 -11
- data/lib/mail/network/delivery_methods/exim.rb +5 -4
- data/lib/mail/network/delivery_methods/file_delivery.rb +13 -12
- data/lib/mail/network/delivery_methods/logger_delivery.rb +2 -5
- data/lib/mail/network/delivery_methods/sendmail.rb +27 -35
- data/lib/mail/network/delivery_methods/smtp.rb +81 -30
- data/lib/mail/network/delivery_methods/smtp_connection.rb +10 -19
- data/lib/mail/network/delivery_methods/test_mailer.rb +8 -6
- data/lib/mail/network/retriever_methods/base.rb +13 -13
- data/lib/mail/network/retriever_methods/imap.rb +8 -5
- data/lib/mail/network/retriever_methods/pop3.rb +22 -22
- data/lib/mail/network/retriever_methods/test_retriever.rb +2 -1
- data/lib/mail/parsers/address_lists_parser.rb +33073 -33064
- data/lib/mail/parsers/address_lists_parser.rl +11 -0
- data/lib/mail/parsers/content_disposition_parser.rb +837 -828
- data/lib/mail/parsers/content_disposition_parser.rl +11 -0
- data/lib/mail/parsers/content_location_parser.rb +773 -764
- data/lib/mail/parsers/content_location_parser.rl +12 -1
- data/lib/mail/parsers/content_transfer_encoding_parser.rb +477 -468
- data/lib/mail/parsers/content_transfer_encoding_parser.rl +11 -0
- data/lib/mail/parsers/content_type_parser.rb +974 -965
- data/lib/mail/parsers/content_type_parser.rl +11 -0
- data/lib/mail/parsers/date_time_parser.rb +841 -832
- data/lib/mail/parsers/date_time_parser.rl +11 -0
- data/lib/mail/parsers/envelope_from_parser.rb +3627 -3530
- data/lib/mail/parsers/envelope_from_parser.rl +11 -0
- data/lib/mail/parsers/message_ids_parser.rb +5110 -2800
- data/lib/mail/parsers/message_ids_parser.rl +16 -1
- data/lib/mail/parsers/mime_version_parser.rb +466 -457
- data/lib/mail/parsers/mime_version_parser.rl +11 -0
- data/lib/mail/parsers/phrase_lists_parser.rb +839 -830
- data/lib/mail/parsers/phrase_lists_parser.rl +12 -1
- data/lib/mail/parsers/received_parser.rb +8692 -8683
- data/lib/mail/parsers/received_parser.rl +11 -0
- data/lib/mail/parsers/rfc5322.rl +28 -13
- data/lib/mail/parsers.rb +11 -17
- data/lib/mail/part.rb +24 -28
- data/lib/mail/parts_list.rb +57 -0
- data/lib/mail/smtp_envelope.rb +57 -0
- data/lib/mail/utilities.rb +321 -69
- data/lib/mail/version.rb +1 -1
- data/lib/mail/yaml.rb +30 -0
- data/lib/mail.rb +2 -22
- metadata +83 -19
- data/lib/mail/check_delivery_params.rb +0 -60
- data/lib/mail/core_extensions/smtp.rb +0 -28
- data/lib/mail/core_extensions/string.rb +0 -17
- data/lib/mail/fields/common/address_container.rb +0 -17
- data/lib/mail/fields/common/common_address.rb +0 -161
- data/lib/mail/fields/common/common_date.rb +0 -36
- data/lib/mail/fields/common/common_field.rb +0 -52
- data/lib/mail/fields/common/common_message_id.rb +0 -49
- data/lib/mail/version_specific/ruby_1_8.rb +0 -163
- data/lib/mail/version_specific/ruby_1_9.rb +0 -278
|
@@ -29,7 +29,7 @@ module Mail
|
|
|
29
29
|
# order: order of emails returned. Possible values are :asc or :desc. Default value is :asc.
|
|
30
30
|
# count: number of emails to retrieve. The default value is 10. A value of 1 returns an
|
|
31
31
|
# instance of Message, not an array of Message instances.
|
|
32
|
-
# keys: are passed as criteria to the SEARCH command. They can either be a string holding the entire search string,
|
|
32
|
+
# keys: are passed as criteria to the SEARCH command. They can either be a string holding the entire search string,
|
|
33
33
|
# or a single-dimension array of search keywords and arguments. Refer to [IMAP] section 6.4.4 for a full list
|
|
34
34
|
# The default is 'ALL'
|
|
35
35
|
#
|
|
@@ -38,7 +38,7 @@ module Mail
|
|
|
38
38
|
#
|
|
39
39
|
class IMAP < Retriever
|
|
40
40
|
require 'net/imap' unless defined?(Net::IMAP)
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
def initialize(values)
|
|
43
43
|
self.settings = { :address => "localhost",
|
|
44
44
|
:port => 143,
|
|
@@ -65,17 +65,20 @@ module Mail
|
|
|
65
65
|
# This is helpful when you don't want your messages to be set to read automatically. Default is false.
|
|
66
66
|
# delete_after_find: flag for whether to delete each retreived email after find. Default
|
|
67
67
|
# is false. Use #find_and_delete if you would like this to default to true.
|
|
68
|
-
# keys: are passed as criteria to the SEARCH command. They can either be a string holding the entire search string,
|
|
68
|
+
# keys: are passed as criteria to the SEARCH command. They can either be a string holding the entire search string,
|
|
69
69
|
# or a single-dimension array of search keywords and arguments. Refer to [IMAP] section 6.4.4 for a full list
|
|
70
70
|
# The default is 'ALL'
|
|
71
71
|
# search_charset: charset to pass to IMAP server search. Omitted by default. Example: 'UTF-8' or 'ASCII'.
|
|
72
72
|
#
|
|
73
|
-
def find(options=
|
|
73
|
+
def find(options=nil, &block)
|
|
74
74
|
options = validate_options(options)
|
|
75
75
|
|
|
76
76
|
start do |imap|
|
|
77
77
|
options[:read_only] ? imap.examine(options[:mailbox]) : imap.select(options[:mailbox])
|
|
78
|
+
|
|
78
79
|
uids = imap.uid_search(options[:keys], options[:search_charset])
|
|
80
|
+
.to_a # older net-imap may return nil, newer may return ESearchResult struct
|
|
81
|
+
.sort # RFC3501 does _not_ require UIDs to be returned in order
|
|
79
82
|
uids.reverse! if options[:what].to_sym == :last
|
|
80
83
|
uids = uids.first(options[:count]) if options[:count].is_a?(Integer)
|
|
81
84
|
uids.reverse! if (options[:what].to_sym == :last && options[:order].to_sym == :asc) ||
|
|
@@ -142,7 +145,7 @@ module Mail
|
|
|
142
145
|
|
|
143
146
|
# Set default options
|
|
144
147
|
def validate_options(options)
|
|
145
|
-
options
|
|
148
|
+
options = options ? Hash[options] : {}
|
|
146
149
|
options[:mailbox] ||= 'INBOX'
|
|
147
150
|
options[:count] ||= 10
|
|
148
151
|
options[:order] ||= :asc
|
|
@@ -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
|
|
|
@@ -44,9 +44,9 @@ module Mail
|
|
|
44
44
|
:enable_ssl => false,
|
|
45
45
|
:read_timeout => nil }.merge!(values)
|
|
46
46
|
end
|
|
47
|
-
|
|
47
|
+
|
|
48
48
|
attr_accessor :settings
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
# Find emails in a POP3 mailbox. Without any options, the 5 last received emails are returned.
|
|
51
51
|
#
|
|
52
52
|
# Possible options:
|
|
@@ -57,20 +57,20 @@ module Mail
|
|
|
57
57
|
# delete_after_find: flag for whether to delete each retreived email after find. Default
|
|
58
58
|
# is false. Use #find_and_delete if you would like this to default to true.
|
|
59
59
|
#
|
|
60
|
-
def find(options =
|
|
60
|
+
def find(options = nil, &block)
|
|
61
61
|
options = validate_options(options)
|
|
62
|
-
|
|
62
|
+
|
|
63
63
|
start do |pop3|
|
|
64
64
|
mails = pop3.mails
|
|
65
65
|
pop3.reset # Clears all "deleted" marks. This prevents non-explicit/accidental deletions due to server settings.
|
|
66
66
|
mails.sort! { |m1, m2| m2.number <=> m1.number } if options[:what] == :last
|
|
67
67
|
mails = mails.first(options[:count]) if options[:count].is_a? Integer
|
|
68
|
-
|
|
68
|
+
|
|
69
69
|
if options[:what].to_sym == :last && options[:order].to_sym == :desc ||
|
|
70
70
|
options[:what].to_sym == :first && options[:order].to_sym == :asc ||
|
|
71
71
|
mails.reverse!
|
|
72
72
|
end
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
if block_given?
|
|
75
75
|
mails.each do |mail|
|
|
76
76
|
new_message = Mail.new(mail.pop)
|
|
@@ -86,11 +86,11 @@ module Mail
|
|
|
86
86
|
end
|
|
87
87
|
emails.size == 1 && options[:count] == 1 ? emails.first : emails
|
|
88
88
|
end
|
|
89
|
-
|
|
89
|
+
|
|
90
90
|
end
|
|
91
91
|
end
|
|
92
|
-
|
|
93
|
-
# Delete all emails from a POP3 server
|
|
92
|
+
|
|
93
|
+
# Delete all emails from a POP3 server
|
|
94
94
|
def delete_all
|
|
95
95
|
start do |pop3|
|
|
96
96
|
unless pop3.mails.empty?
|
|
@@ -108,30 +108,30 @@ module Mail
|
|
|
108
108
|
yield pop3
|
|
109
109
|
end
|
|
110
110
|
end
|
|
111
|
-
|
|
111
|
+
|
|
112
112
|
private
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
# Set default options
|
|
115
115
|
def validate_options(options)
|
|
116
|
-
options
|
|
116
|
+
options = options ? Hash[options] : {}
|
|
117
117
|
options[:count] ||= 10
|
|
118
118
|
options[:order] ||= :asc
|
|
119
119
|
options[:what] ||= :first
|
|
120
120
|
options[:delete_after_find] ||= false
|
|
121
121
|
options
|
|
122
122
|
end
|
|
123
|
-
|
|
123
|
+
|
|
124
124
|
# Start a POP3 session and ensure that it will be closed in any case. Any messages
|
|
125
125
|
# marked for deletion via #find_and_delete or with the :delete_after_find option
|
|
126
126
|
# will be deleted when the session is closed.
|
|
127
127
|
def start(config = Configuration.instance, &block)
|
|
128
128
|
raise ArgumentError.new("Mail::Retrievable#pop3_start takes a block") unless block_given?
|
|
129
|
-
|
|
129
|
+
|
|
130
130
|
pop3 = Net::POP3.new(settings[:address], settings[:port], false)
|
|
131
131
|
pop3.enable_ssl(OpenSSL::SSL::VERIFY_NONE) if settings[:enable_ssl]
|
|
132
132
|
pop3.read_timeout = settings[:read_timeout] if settings[:read_timeout]
|
|
133
133
|
pop3.start(settings[:user_name], settings[:password])
|
|
134
|
-
|
|
134
|
+
|
|
135
135
|
yield pop3
|
|
136
136
|
ensure
|
|
137
137
|
if defined?(pop3) && pop3 && pop3.started?
|