mailroute 0.0.4 → 0.0.5

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 (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.