mailroute 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/Gemfile.lock +1 -1
  2. data/README.md +57 -50
  3. data/lib/mailroute.rb +3 -0
  4. data/lib/mailroute/models/anti_spam_modes.rb +11 -0
  5. data/lib/mailroute/models/email_account.rb +10 -0
  6. data/lib/mailroute/models/localpart_alias.rb +7 -0
  7. data/lib/mailroute/models/policy_domain.rb +2 -0
  8. data/lib/mailroute/models/policy_filter.rb +21 -0
  9. data/lib/mailroute/models/policy_user.rb +2 -0
  10. data/lib/mailroute/version.rb +1 -1
  11. data/requirements.txt +223 -0
  12. data/spec/lib/mailroute/models/email_account_spec.rb +39 -1
  13. data/spec/lib/mailroute/models/localpart_alias_spec.rb +34 -0
  14. data/spec/lib/mailroute/models/policy_filter_spec.rb +69 -0
  15. data/spec/vcr_cassettes/Mailroute_EmailAccount/_add_alias/adding_an_alias/should_add_an_alias_with_given_name.yml +106 -0
  16. data/spec/vcr_cassettes/Mailroute_EmailAccount/_add_alias/adding_an_alias/should_add_one_more_alias.yml +208 -0
  17. data/spec/vcr_cassettes/Mailroute_EmailAccount/_bulk_add_aliases/adding_aliases/should_add_aliases_with_given_names.yml +104 -0
  18. data/spec/vcr_cassettes/Mailroute_EmailAccount/_bulk_add_aliases/adding_aliases/should_add_one_more_alias.yml +206 -0
  19. data/spec/vcr_cassettes/Mailroute_LocalpartAlias/CRUD/should_create_read_update_and_delete_localpart_aliases.yml +736 -0
  20. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyDomain/aggressive_mode/anti_spam_preset/.yml +104 -0
  21. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyDomain/disabling_banned_filter/bypass_banned_checks/.yml +104 -0
  22. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyDomain/disabling_header_filter/bypass_header_checks/.yml +104 -0
  23. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyDomain/disabling_spam_filter/bypass_spam_checks/.yml +104 -0
  24. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyDomain/disabling_virus_filter/bypass_virus_checks/.yml +104 -0
  25. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyDomain/enabling_banned_filter/bypass_banned_checks/.yml +104 -0
  26. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyDomain/enabling_header_filter/bypass_header_checks/.yml +104 -0
  27. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyDomain/enabling_spam_filter/bypass_spam_checks/.yml +104 -0
  28. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyDomain/enabling_virus_filter/bypass_virus_checks/.yml +104 -0
  29. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyDomain/lenient_mode/anti_spam_preset/.yml +104 -0
  30. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyDomain/unknown_mode/should_raise_argument_error.yml +37 -0
  31. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyUser/aggressive_mode/anti_spam_preset/.yml +104 -0
  32. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyUser/disabling_banned_filter/bypass_banned_checks/.yml +104 -0
  33. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyUser/disabling_header_filter/bypass_header_checks/.yml +104 -0
  34. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyUser/disabling_spam_filter/bypass_spam_checks/.yml +104 -0
  35. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyUser/disabling_virus_filter/bypass_virus_checks/.yml +104 -0
  36. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyUser/enabling_banned_filter/bypass_banned_checks/.yml +104 -0
  37. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyUser/enabling_header_filter/bypass_header_checks/.yml +104 -0
  38. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyUser/enabling_spam_filter/bypass_spam_checks/.yml +104 -0
  39. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyUser/enabling_virus_filter/bypass_virus_checks/.yml +104 -0
  40. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyUser/lenient_mode/anti_spam_preset/.yml +104 -0
  41. data/spec/vcr_cassettes/Mailroute_PolicyFilter/Mailroute_PolicyUser/unknown_mode/should_raise_argument_error.yml +37 -0
  42. metadata +78 -16
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mailroute (0.0.4)
4
+ mailroute (0.0.5)
5
5
  activeresource
6
6
  json_pure
7
7
  rest-client
data/README.md CHANGED
@@ -24,74 +24,81 @@ Or install it by yourself as:
24
24
 
25
25
  # Configuration
26
26
 
27
- Mailroute.configure(
28
- :username => '<username here>',
29
- :apikey => '0d1a...a33'
30
- )
31
-
27
+ ```ruby
28
+ Mailroute.configure(
29
+ :username => '<username here>',
30
+ :apikey => '0d1a...a33'
31
+ )
32
+ ```
32
33
 
33
34
  # Reseller
34
35
 
35
- # A list of resellers
36
- Mailroute::Reseller.list #=> [...]
36
+ ```ruby
37
+ # A list of resellers
38
+ Mailroute::Reseller.list #=> [...]
37
39
 
38
- # You can specify limit and offset
39
- Mailroute::Reseller.list.offset(20).limit(30) #=> [...]
40
+ # You can specify limit and offset
41
+ Mailroute::Reseller.list.offset(20).limit(30) #=> [...]
40
42
 
41
- reseller = Mailroute::Reseller.get(12) #=> Reseller<...>
42
- reseller.name #=> "John Doe"
43
- reseller.name = 'Jane Doe'
44
- reseller.save
43
+ reseller = Mailroute::Reseller.get(12) #=> Reseller<...>
44
+ reseller.name #=> "John Doe"
45
+ reseller.name = 'Jane Doe'
46
+ reseller.save
45
47
 
46
- Mailroute::Reseller.get(12).name #=> 'Jane Doe'
48
+ Mailroute::Reseller.get(12).name #=> 'Jane Doe'
47
49
 
48
- reseller.delete
50
+ reseller.delete
49
51
 
50
- Mailroute::Reseller.get(12) #=> ActiveResource::ResourceNotFound
52
+ Mailroute::Reseller.get(12) #=> ActiveResource::ResourceNotFound
51
53
 
52
- reseller = Mailroute::Reseller.get(name: 'John Smith') #=> Reseller<...>
54
+ reseller = Mailroute::Reseller.get(name: 'John Smith') #=> Reseller<...>
53
55
 
54
- resellers = Mailroute::Reseller.search('Smith') #=> [Reseller<...>, ...]
55
- resellers.include?(reseller) #=> true
56
+ resellers = Mailroute::Reseller.search('Smith') #=> [Reseller<...>, ...]
57
+ resellers.include?(reseller) #=> true
56
58
 
57
- Mailroute::Reseller.filter(name: 'Smith') #=> [...]
58
- Mailroute::Reseller.filter(name__exact: 'John Smith') #=> [...]
59
- Mailroute::Reseller.filter(name__starts_with: 'Jo') #=> [...]
59
+ Mailroute::Reseller.filter(name: 'Smith') #=> [...]
60
+ Mailroute::Reseller.filter(name__exact: 'John Smith') #=> [...]
61
+ Mailroute::Reseller.filter(name__starts_with: 'Jo') #=> [...]
60
62
 
61
- Mailroute::Reseller.list.order_by('-name')
62
- Mailroute::Reseller.list.order_by('name')
63
- Mailroute::Reseller.list.order_by('created_at')
63
+ Mailroute::Reseller.list.order_by('-name')
64
+ Mailroute::Reseller.list.order_by('name')
65
+ Mailroute::Reseller.list.order_by('created_at')
64
66
 
65
- new_reseller = Mailroute::Reseller.create(name: 'New Guy') #=> Reseller<...>
66
- new_reseller.id #=> 11111
67
+ new_reseller = Mailroute::Reseller.create(name: 'New Guy') #=> Reseller<...>
68
+ new_reseller.id #=> 11111
67
69
 
68
- new_resellers = Mailroute::Reseller.bulk_create(
69
- { name: 'R2D2' },
70
- { name: '3PO' },
71
- { name: 'Luke Skywalker' }
72
- )
73
- new_resellers.count #=> 3
70
+ new_resellers = Mailroute::Reseller.bulk_create(
71
+ { name: 'R2D2' },
72
+ { name: '3PO' },
73
+ { name: 'Luke Skywalker' }
74
+ )
75
+ new_resellers.count #=> 3
74
76
 
75
- # mass deletion
76
- # by ids:
77
- Mailroute::Reseller.delete([10, 12, 13])
78
- # by instances:
79
- Mailroute::Reseller.delete(new_resellers)
77
+ # mass deletion
78
+ # by ids:
79
+ Mailroute::Reseller.delete([10, 12, 13])
80
+ # by instances:
81
+ Mailroute::Reseller.delete(new_resellers)
80
82
 
81
- # Associations:
82
- reseller.customers #=> [Customer<...>, ...]
83
- reseller.admins #=> [Admin<...>, ...]
84
- reseller.contacts #=> [ResellerContact<...>, ...]
85
- reseller.branding_info #=> BrandingInfo<...>
83
+ # Associations:
84
+ reseller.customers #=> [Customer<...>, ...]
85
+ reseller.admins #=> [Admin<...>, ...]
86
+ reseller.contacts #=> [ResellerContact<...>, ...]
87
+ reseller.branding_info #=> BrandingInfo<...>
86
88
 
87
- send_welcome = true
88
- reseller.create_admin('admin@example.com', send_welcome) #=> Admin<...>
89
- reseller.delete_admin('admin@example.com')
90
- reseller.create_contact(params) #=> ResellerContact<...>
91
- reseller.create_customer(params) #=> Customer<...>
89
+ send_welcome = true
90
+ reseller.create_admin('admin@example.com', send_welcome) #=> Admin<...>
91
+ reseller.delete_admin('admin@example.com')
92
+ reseller.create_contact(params) #=> ResellerContact<...>
93
+ reseller.create_customer(params) #=> Customer<...>
92
94
 
93
- # All list operations allow chaining
94
- Mailroute::Reseller.limit(10).offset(30).filter(name: 'Fox').order('created_at') #=> [Reseller<...>, ...]
95
+ # All list operations allow chaining
96
+ Mailroute::Reseller.
97
+ limit(10).
98
+ offset(30).
99
+ filter(name: 'Fox').
100
+ order('created_at') #=> [Reseller<...>, ...]
101
+ ```
95
102
 
96
103
  ## Contributing
97
104
 
@@ -19,10 +19,13 @@ require 'mailroute/models/admin'
19
19
  require 'mailroute/models/reseller'
20
20
  require 'mailroute/models/branding_info'
21
21
  require 'mailroute/models/domain_alias'
22
+ require 'mailroute/models/anti_spam_modes'
23
+ require 'mailroute/models/policy_filter'
22
24
  require 'mailroute/models/policy_user'
23
25
  require 'mailroute/models/notification_account_task'
24
26
  require 'mailroute/models/email_account_contact'
25
27
  require 'mailroute/models/wblist'
28
+ require 'mailroute/models/localpart_alias'
26
29
  require 'mailroute/models/email_account'
27
30
  require 'mailroute/models/mail_server'
28
31
  require 'mailroute/models/outbound_server'
@@ -0,0 +1,11 @@
1
+ module Mailroute
2
+ module AntiSpamModes
3
+ LENIENT = 'lenient'
4
+ STANDARD = 'standard'
5
+ AGGRESSIVE = 'aggressive'
6
+
7
+ def self.valid?(mode)
8
+ [LENIENT, STANDARD, AGGRESSIVE].include?(mode)
9
+ end
10
+ end
11
+ end
@@ -6,6 +6,7 @@ module Mailroute
6
6
  has_one :notification_task, :class => NotificationAccountTask
7
7
  has_one :contact, :class => EmailAccountContact
8
8
  has_many :wblist, :class => WBList
9
+ has_many :aliases, :class => LocalpartAlias
9
10
 
10
11
  def blacklist
11
12
  WBList.filter(:email_account => id, :wb => 'b').map(&:email)
@@ -34,6 +35,15 @@ module Mailroute
34
35
  self.class.format.decode(response.body)['api_key']
35
36
  end
36
37
 
38
+ def add_alias(localpart)
39
+ LocalpartAlias.create(:email_account => self, :localpart => localpart)
40
+ end
41
+
42
+ def bulk_add_aliases(localparts)
43
+ request_body = self.class.format.encode(:aliases => localparts)
44
+ connection.post(element_path(prefix_options) + 'mass_add_aliases/', request_body, self.class.headers)
45
+ end
46
+
37
47
  class << self
38
48
  alias_method :get_by_id, :get
39
49
  def get(*args)
@@ -0,0 +1,7 @@
1
+ module Mailroute
2
+ class LocalpartAlias < Base
3
+ self.collection_name = 'localpart_alias'
4
+ has_one :email_account
5
+ has_one :domain
6
+ end
7
+ end
@@ -2,5 +2,7 @@ module Mailroute
2
2
  class PolicyDomain < Base
3
3
  self.collection_name = 'policy_domain'
4
4
  has_one :domain
5
+
6
+ include PolicyFilter
5
7
  end
6
8
  end
@@ -0,0 +1,21 @@
1
+ module Mailroute
2
+ module PolicyFilter
3
+ %w(spam virus header banned).each do |type|
4
+ define_method("disable_#{type}_filter") do
5
+ attributes["bypass_#{type}_checks"] = 'Y'
6
+ save!
7
+ end
8
+
9
+ define_method("enable_#{type}_filter") do
10
+ attributes["bypass_#{type}_checks"] = 'N'
11
+ save!
12
+ end
13
+ end
14
+
15
+ def set_anti_spam_mode(mode)
16
+ raise ArgumentError, "Invalid mode #{mode}" unless AntiSpamModes.valid?(mode)
17
+ attributes['anti_spam_preset'] = mode
18
+ save!
19
+ end
20
+ end
21
+ end
@@ -2,5 +2,7 @@ module Mailroute
2
2
  class PolicyUser < Base
3
3
  self.collection_name = 'policy_user'
4
4
  has_one :email_account
5
+
6
+ include PolicyFilter
5
7
  end
6
8
  end
@@ -1,3 +1,3 @@
1
1
  module Mailroute
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -0,0 +1,223 @@
1
+
2
+
3
+
4
+
5
+ import mailroute
6
+
7
+ mailroute.configure(username="blabla", apikey="blabla")
8
+
9
+ Reseller resource and common actions/interface.
10
+
11
+ reseller_list = mailroute.Reseller.list() # list
12
+ reseller_list = mailroute.Reseller.list().limit(20) # list
13
+ reseller_list = mailroute.Reseller.list().offset(20) # list
14
+ reseller = mailroute.Reseller.get(id=12) # 1 instance
15
+ reseller.name = "newname"
16
+ reseller.save()
17
+ reseller = mailroute.Reseller.get(name="test") # 1 instance
18
+ reseller.name # test
19
+ reseller.delete()
20
+ reseller_list = mailroute.Reseller.search("searchstr") # list
21
+ reseller_list = mailroute.Reseller.filter(name__startswith="begin") # list
22
+ reseller_list = mailroute.Reseller.filter(name__exact="begin") # list
23
+ reseller_list = mailroute.Reseller.filter(name="begin") # list
24
+
25
+ # all list field allow ordering
26
+
27
+ reseller_list = mailroute.Reseller.filter(name="begin").order_by("-name") # list
28
+ reseller_list = mailroute.Reseller.filter(name="begin").order_by("name") # list
29
+ reseller_list = mailroute.Reseller.filter(name="begin").order_by("created_at") # list
30
+
31
+ new_reseller = mailroute.Reseller.create(name="newresl")
32
+ mailroute.Reseller.bulk_create([{'name':"r1"},{"name":"r2"}]) # mass create
33
+ mailroute.Reseller.delete([reseller1,reseller2]) # mass delete of resellers by instance of list of pk
34
+
35
+ reseller.customers # list of customers - additional api call , cached
36
+ reseller.admins # list of admins - additional api call , cached
37
+ reseller.contacts # list of contacts - additional api call , cached
38
+ reseller.branding_info # branding info instance for this reseller, api call, cached
39
+
40
+ reseller.create_admin(email, send_welcome)
41
+ reseller.delete_admin(email)
42
+ reseller.create_contact(params)
43
+ reseller.create_customer(params)
44
+
45
+
46
+
47
+ CUSTOMER RESORUCE
48
+ # crud same as reseller.
49
+
50
+ customer = mailroute.Customer.get(id=12)
51
+
52
+ # create
53
+ customer_new = mailroute.Customer.create({'name':"newresl", "customer":mailroute.Customer.get(id=12)})
54
+ customer_new = mailroute.Customer.create({'name':"newresl", "customer":"customername"}) # reference via name
55
+ customer_new = mailroute.Customer.create({'name':"newresl", "customer":3}) # reference via id
56
+
57
+ # When create references can be object or their key fields
58
+
59
+ get fields = id, name
60
+ create fields required = name, reseller
61
+ filter = name , reseller
62
+ ordering = ['name', 'created_at']
63
+ relation fields list = reseller, domains, contacts, admins
64
+ relation fields one = branding_info
65
+
66
+
67
+ customer.create_domain(params)
68
+ customer.create_contact(params)
69
+ customer.create_admin(email, send_welcome)
70
+ customer.delete_admin(email)
71
+
72
+
73
+ DOMAIN RESORUCE
74
+
75
+ get fields = id, name
76
+ filter = name , customer
77
+ create fields required = name, customer
78
+ create fields optional = hold_email, active, deliveryport, userlist_complete, outbound_enabled
79
+ ordering = ['name', 'created_at', 'active', 'hold_email' ]
80
+ relation fields list = customer (R), domain_aliases , email_accounts, mail_servers, outbound_servers, contacts, blacklist, whitelist , outbound_servers
81
+ relation fields one = policy (RU), notification_task (RU)
82
+
83
+ domain.get_quarantine() # return quarantine list
84
+ domain.move_to_customer(customer_instance) # move domain
85
+ domain.create_contact(params)
86
+ domain.create_mailserver(params)
87
+ domain.create_outbound_server(params)
88
+ domain.create_email_account(params)
89
+ domain.bulk_create_email_account([{},{}])
90
+ domain.create_alias(params)
91
+ domain.create_outbound_server("1.2.1.1")
92
+ domain.add_to_blacklist("spam@spam.com")
93
+ domain.add_to_whitelist("nospam@nospam.com")
94
+
95
+
96
+
97
+ DOMAINALIASRESOURCE
98
+ get fields = id,name
99
+ filter = domain
100
+ ordering = ['name', 'created_at']
101
+ create fields required = name, domain
102
+ create fields optional = active
103
+ relation fields one = domain
104
+
105
+
106
+ MAILSERVERRESOURCE
107
+ get fields = id
108
+ filter = domain
109
+ ordering = ['server', 'priority', ]
110
+ create fields required = server, domain
111
+ create fields optional = active
112
+ relation fields one = domain
113
+
114
+
115
+ POLICYDOMAINRESOURCE - ONLY RU
116
+ get fields = id
117
+
118
+ mailroute.Policy.get_default_policy() # return global default policy
119
+
120
+ relation fields one = domain
121
+
122
+ POLICYUSERRESOURCE - ONLY RU
123
+ get fields = id
124
+ relation fields one = email_account
125
+
126
+ notification_account_task.use_domain_policy()
127
+ notification_account_task.use_self_policy()
128
+ notification_account_task.is_active()
129
+
130
+
131
+
132
+ EMAILACCOUNTRESOURCE
133
+
134
+ get fields = id, localpart+domain
135
+ filter = domain, localpart
136
+ ordering = ['localpart', 'priority', 'domain', 'created_at']
137
+ create fields required = name, domain, localpart, create_opt ( choice of "generate_pwd","set_pwd")
138
+ create fields opt = password, send_welcome
139
+ relation fields one = domain , policy, notification_task , contact
140
+ relation fields list = aliases, blacklist, whitelist, quarantine
141
+
142
+
143
+ email_account.set_password("newpsswwd")
144
+ email_account.create_user(password=None, send_welcome=True)
145
+ mailroute.EmailAccount.create("localpart@domain.com")
146
+ email_account.create_user(password=None, send_welcome=True)
147
+ mailroute.EmailAccount.create("localpart@domain.com")
148
+ email_account.convert_to_alias()
149
+ email_account.bulk_add_alias(["alias1","alias2"])
150
+ email_account.add_alias("alias")
151
+ email_account.add_to_blacklist("spam@spam.com")
152
+ email_account.add_to_whitelist("nospam@nospam.com")
153
+
154
+
155
+ LOCALPARTALIASRESOURCE
156
+ get fields = id
157
+ filter = email_account
158
+ ordering = ['localpart', 'created_at', 'updated_at', ]
159
+ create fields required = email_account, localpart
160
+ relation fields one = email_account, domain
161
+
162
+
163
+ RESELLERCONTACTRESOURCE,CUSTOMERCONTACTRESOURCE,DOMAINCONTACTRESOURCE
164
+ get fields = id
165
+ filter = email, ( customer,reseller,domain)
166
+ ordering = ['first_name', 'last_name', 'email', 'is_technical', 'is_billing', 'is_emergency']
167
+ create fields required = email
168
+ create fields opt = first_name ,last_name,email, city,state, zipcode ,country, phone, address , address2 , is_technical, is_billing , is_emergency
169
+ relation fields one = ( customer,reseller,domain)
170
+
171
+ EMAILACCOUNTCONTACTRESOURCE
172
+ get fields = id
173
+ filter = email_account, email
174
+ ordering = ['first_name', 'last_name', 'email', 'is_technical', 'is_billing', 'is_emergency']
175
+ create fields required = email
176
+ create fields opt = first_name ,last_name,email, city,state, zipcode ,country, phone, address , address2 , is_technical , is_billing , is_emergency
177
+ relation fields one = email_account
178
+
179
+ OUTBOUNDSERVERRESOURCE
180
+ get fields = id
181
+ filter = domain
182
+ create fields required = server
183
+ relation fields one = domain
184
+
185
+ NOTIFICATIONDOMAINTASKRESOURCE
186
+ get fields = id
187
+ filter = domain
188
+ relation fields one = domain
189
+
190
+ NOTIFICATIONACCOUNTTASKRESOURCE
191
+ get fields = id
192
+ filter = email_account
193
+ relation fields one = email_account
194
+
195
+ notification_account_task.use_domain_notification()
196
+ notification_account_task.use_self_notification()
197
+ notification_account_task.is_active()
198
+
199
+
200
+ WBLISTRESOURCE
201
+ get fields = id
202
+ filter = domain, email_account, wb
203
+ create fields required = email, (email_account or domain), wb ( b for blacklist, w for whitelist)
204
+ relation fields one = domain, email_account
205
+
206
+
207
+ ADMINRESOURCE
208
+ get fields = id
209
+ filter = domain, email_account, wb
210
+ create fields required = email, (email_account or domain), wb ( b for blacklist, w for whitelist)
211
+ relation fields one = domain, email_account
212
+
213
+
214
+ QUARANTINERESOURCE
215
+ filter = domain, email_account , content ,rs,rid,email
216
+ ordering_dict = recipient,from_addr,spam_level,time_num,size,subject
217
+
218
+ message.whitelist_sender()
219
+ message.recover()
220
+ qlist = mailroute.Quarantine.filter(email_account=email_account_inst)
221
+ qlist.delete()
222
+ qlist.recover()
223
+ qlist.whitelist_sender(what='email',for='domain') # values for what email, domain for - domain,emailaccount.