ruby-cakemail 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,215 @@
1
+ # A Mailing is specific email content (From Name, From Email, Subject, Body) sent to a specific list or a sub-list..
2
+ # Mailings may have the following status:
3
+ # * Incomplete => Mailing that is not fully prepared to be delivered
4
+ # * Scheduled => Mailing that is ready and scheduled to be delivered
5
+ # * Delivering => Mailing in process of being delivered
6
+ # * Delivered => Mailing has been delivered
7
+ # * Deleted => Please note: Only an Incomplete Mailing can be deleted
8
+ # A Mailing in process of being delivered can be suspended and resumed at any time.
9
+ module CakeMail
10
+ module API
11
+ class ClassMailing < CakeMail::ServiceClass
12
+ method :name => "Create", :requires => [ :campaign_id, :name, :user_key ], :optional => [ :encoding ]
13
+ method :name => "Delete", :requires => [ :mailing_id, :user_key ]
14
+ method :name => "GetEmailMessage", :requires => [ :mailing_id, :user_key ]
15
+ method :name => "GetHtmlMessage", :requires => [ :mailing_id, :user_key ]
16
+ method :name => "GetInfo", :requires => [ :mailing_id, :user_key ]
17
+ method :name => "GetLinksLog", :requires => [ :mailing_id, :user_key ], :optional => [ :start_date, :end_date ]
18
+ method :name => "GetList", :requires => [ :campaign_id, :user_key ],
19
+ :optional => [ :status, :campaign_id, :list_id, :limit, :offset, :count ]
20
+ method :name => "GetLog", :requires => [ :mailing_id, :user_key ], :optional => [ :action, :record_id, :start_date, :end_date,
21
+ :date, :extra, :limit, :offset, :count, :uniques ]
22
+ method :name => "GetStats", :requires => [ :mailing_id, :information, :user_key ]
23
+ method :name => "GetTextMessage", :requires => [ :mailing_id, :user_key ]
24
+ method :name => "Resume", :requires => [ :mailing_id, :user_key ]
25
+ method :name => "Schedule", :requires => [ :mailing_id, :user_key ], :optional => [ :date ]
26
+ method :name => "SendTestEmail", :requires => [ :mailing_id, :test_email, :test_type, :user_key ]
27
+ method :name => "SetInfo", :requires => [ :mailing_id, :user_key ], :optional => [ :campaign_id, :list_id, :sublist_id, :next_step,
28
+ :encoding, :clickthru_html, :clickthru_text, :opening_stats, :unsub_bottom_link, :name, :subject,
29
+ :sender_name, :sender_email, :html_message, :text_message, :campaign_id ]
30
+ method :name => "Suspend", :requires => [ :mailing_id, :user_key ]
31
+ method :name => "Unschedule", :requires => [ :mailing_id, :user_key ]
32
+ end
33
+ end
34
+
35
+ class Mailing
36
+ attr_reader :id, :active_emails, :status, :suspended, :created_on, :scheduled_on, :scheduled_for, :in_queue, :out_queue, :recipients
37
+ attr_accessor :campaign_id, :list_id, :sublist_id, :next_step, :encoding, :clickthru_html, :clickthru_text, :opening_stats,
38
+ :unsub_bottom_link, :name, :subject, :sender_name, :sender_email, :html_message, :text_message, :campaign_id
39
+
40
+ def initialize(campaign, id)
41
+ @campaign = campaign
42
+ @id = id
43
+ get_info
44
+ end
45
+ # Deletes a mailing.
46
+ def delete
47
+ @campaign.user.session.request("CakeMail::API::ClassMailing", "Delete", { :mailing_id => @id, :user_key => @campaign.user.user_key })
48
+ self.freeze
49
+ end
50
+ # Returns the subject and the message of the mailing.
51
+ def get_email_message
52
+ @campaign.user.session.request("CakeMail::API::ClassMailing", "GetEmailMessage", { :mailing_id => @id,
53
+ :user_key => @campaign.user.user_key })
54
+ @subject = res['subject'].first
55
+ @message = res['message'].first
56
+ end
57
+ # Retrieves the html message of a mailing.
58
+ def get_html_message
59
+ @campaign.user.session.request("CakeMail::API::ClassMailing", "GetHtmlMessage", { :mailing_id => @id,
60
+ :user_key => @campaign.user.user_key })
61
+ @html_message = res['html_message'].first
62
+ end
63
+ # Retrieves the text message of a mailing.
64
+ def get_text_message
65
+ @campaign.user.session.request("CakeMail::API::ClassMailing", "GetTextMessage", { :mailing_id => @id,
66
+ :user_key => @campaign.user.user_key })
67
+ @text_message = res['text_message'].first
68
+ end
69
+ # Retrieves the setting for a mailing.
70
+ def get_info(id = @id)
71
+ res = @campaign.user.session.request("CakeMail::API::ClassMailing", "GetInfo", { :mailing_id => @id,
72
+ :user_key => @campaign.user.user_key })
73
+ @active_emails = res['active_emails'].first
74
+ @campaign_id = res['campaign_id'].first
75
+ @clickthru_html = res['clickthru_html'].first
76
+ @clickthru_text = res['clickthru_text'].first
77
+ @created_on = res['created_on'].first
78
+ @encoding = res['encoding'].first
79
+ @html_message = res['html_message'].first
80
+ @id = res['id'].first
81
+ @in_queue = res['in_queue'].first
82
+ @list_id = res['list_id'].first
83
+ @name = res['name'].first
84
+ @next_step = res['next_step'].first
85
+ @opening_stats = res['opening_stats'].first
86
+ @out_queue = res['out_queue'].first
87
+ @recipients = res['recipients'].first
88
+ @scheduled_for = res['scheduled_for'].first
89
+ @scheduled_on = res['scheduled_on'].first
90
+ @sender_name = res['sender_name'].first
91
+ @status = res['status'].first
92
+ @subject = res['subject'].first
93
+ @sublist_id = res['sublist_id'].first
94
+ @suspended = res['suspended'].first
95
+ @text_message = res['text_message'].first
96
+ @unsub_bottom_link = res['unsub_bottom_link'].first
97
+ end
98
+ # Retrieves information about the log of a mailing.
99
+ #
100
+ # Arguments :
101
+ # * args = { :action => optional, :record_id => optional, :start_date => optional, :end_date => optional, :date => optional,
102
+ # :extra => optional, :limit => optional, :offset => optional, :count => optional, :uniques => optional }
103
+ def get_log(args)
104
+ options = { :mailing_id => @id, :user_key => @campaign.user.user_key }
105
+ options[:action] = args[:action] unless args[:action].nil?
106
+ options[:record_id] = args[:record_id] unless args[:record_id].nil?
107
+ options[:start_date] = args[:start_date] unless args[:start_date].nil?
108
+ options[:end_date] = args[:end_date] unless args[:end_date].nil?
109
+ options[:date] = args[:date] unless args[:date].nil?
110
+ options[:extra] = args[:extra] unless args[:extra].nil?
111
+ options[:limit] = args[:limit] unless args[:limit].nil?
112
+ res = @campaign.user.session.request("CakeMail::API::ClassMailing", "GetLog", options)
113
+ res['log']
114
+ end
115
+ # Retrieves statistics about the links of a mailing.
116
+ def get_links_log(start_date = nil, end_date = nil)
117
+ args = { :mailing_id => @id, :user_key => @campaign.user.user_key }
118
+ args[:start_date] = start_date unless start_date.nil?
119
+ args[:end_date] = end_date unless end_date.nil?
120
+ res = @campaign.user.session.request("CakeMail::API::ClassMailing", "GetLinksLog", args)
121
+ res['link']
122
+ end
123
+ # Retrieves the links of a mailing.
124
+ def get_links(status = nil)
125
+ args = { :mailing_id => @id, :user_key => @campaign.user.user_key }
126
+ args[:status] = status unless status.nil?
127
+ res = @campaign.user.session.request("CakeMail::API::ClassMailing", "GetLinks", args)
128
+ res['link']
129
+ end
130
+ # Retrieves statistics about a mailing.
131
+ def get_stats(information)
132
+ res = @campaign.user.session.request("CakeMail::API::ClassMailing", "GetStats", { :information => information, :mailing_id => @id,
133
+ :user_key => @campaign.user.user_key })
134
+ res[information].first
135
+ end
136
+ # Resumes the delivery of a mailing.
137
+ def resume
138
+ res = @campaign.user.session.request("CakeMail::API::ClassMailing", "Resume", { :mailing_id => @id,
139
+ :user_key => @campaign.user.user_key })
140
+ end
141
+
142
+ def save
143
+ self.set_info
144
+ end
145
+ # Schedules a mailing for delivery.
146
+ def schedule(date = nil)
147
+ args = { :mailing_id => @id, :user_key => @campaign.user.user_key }
148
+ args[:date] = date unless date.nil?
149
+ res = @campaign.user.session.request("CakeMail::API::ClassMailing", "Schedule", args)
150
+ end
151
+ # Sends the mailing as a test to an email.
152
+ def send_test_email(test_email, test_type)
153
+ res = @campaign.user.session.request("CakeMail::API::ClassMailing", "SendTestEmail", { :mailing_id => @id,
154
+ :user_key => @campaign.user.user_key, :test_email => test_email, :test_type => test_type })
155
+ end
156
+ # Modifies the settings of a mailing.
157
+ def set_info
158
+ args = { :mailing_id => @id, :user_key => @campaign.user.user_key }
159
+ args[:campaign_id] = @campaign_id unless @campaign_id.nil?
160
+ args[:list_id] = @list_id unless @list_id.nil? or @list_id == '0'
161
+ args[:sublist_id] = @sublist_id unless @sublist_id.nil? or @sublist_id == '0'
162
+ args[:next_step] = @next_step unless @next_step.nil?
163
+ args[:encoding] = @encoding unless @encoding.nil?
164
+ args[:clickthru_html] = @clickthru_html unless @clickthru_html.nil?
165
+ args[:clickthru_text] = @clickthru_text unless @clickthru_text.nil?
166
+ args[:opening_stats] = @opening_stats unless @opening_stats.nil?
167
+ args[:unsub_bottom_link] = @unsub_bottom_link unless @unsub_bottom_link.nil?
168
+ args[:name] = @name unless @name.nil?
169
+ args[:subject] = @subject unless @subject.nil?
170
+ args[:sender_name] = @sender_name unless @sender_name.nil?
171
+ args[:sender_email] = @sender_email unless @sender_email.nil?
172
+ args[:html_message] = @html_message unless @html_message.nil?
173
+ args[:text_message] = @text_message unless @text_message.nil?
174
+ args[:campaign_id] = @campaign_id unless @campaign_id.nil?
175
+ res = @campaign.user.session.request("CakeMail::API::ClassMailing", "SetInfo", args)
176
+ end
177
+ # Suspends the delivery of a mailing.
178
+ def suspend
179
+ res = @campaign.user.session.request("CakeMail::API::ClassMailing", "Suspend", { :mailing_id => @id,
180
+ :user_key => @campaign.user.user_key })
181
+ end
182
+ # Unschedules a mailing from delivery.
183
+ def unschedule
184
+ res = @campaign.user.session.request("CakeMail::API::ClassMailing", "Unschedule", { :mailing_id => @id,
185
+ :user_key => @campaign.user.user_key })
186
+ end
187
+
188
+ class << self
189
+ # Creates a mailing.
190
+ def create(campaign, name, encoding = nil)
191
+ args = { :campaign_id => campaign.id, :name => name, :user_key => campaign.user.user_key }
192
+ args[:encoding] = encoding unless encoding.nil?
193
+ res = campaign.user.session.request("CakeMail::API::ClassMailing", "Create", args)
194
+ Mailing.new(campaign, res['id'].first)
195
+ end
196
+ # Returns the list of mailings.
197
+ #
198
+ # Arguments :
199
+ # * args = { :campaign => required, :status => optional, :campaign_id => optional, :list_id => optional, :limit => optional,
200
+ # :offset => optional, :count => optional }
201
+ def get_list(args)
202
+ raise ArgumentError if args.nil? or args[:campaign].nil?
203
+ options = { :user_key => args[:campaign].user.user_key }
204
+ options[:status] = args[:status] unless args[:status].nil?
205
+ options[:campaign_id] = args[:campaign_id] unless args[:campaign_id].nil?
206
+ options[:list_id] = args[:list_id] unless args[:list_id].nil?
207
+ options[:limit] = args[:limit] unless args[:limit].nil?
208
+ options[:offset] = args[:offset] unless args[:offset].nil?
209
+ options[:count] = args[:count] unless args[:count].nil?
210
+ res = args[:campaign].user.session.request("CakeMail::API::ClassMailing", "GetList", options)
211
+ res['mailing']
212
+ end
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,64 @@
1
+ # The Relay accepts an individual email in a single API call, and applies open and link tracking, performs sender-email authentication,
2
+ # delivers the email and logs recipient activity.
3
+ #
4
+ # Possible usage:
5
+ # * Password reminders
6
+ # * Email invoices
7
+ # * Automatic email notifications
8
+ # * Membership invitations
9
+ # * Confirmations
10
+ # * User to user messaging systems
11
+ # * SMTP to Relay
12
+ module CakeMail
13
+ module API
14
+ class ClassRelay < CakeMail::ServiceClass
15
+ method :name => "send", :requires => [ :user_key, :email, :sender_name, :sender_email, :subject ], :optional => [ :html_message,
16
+ :text_message, :encoding, :track_opening, :track_clicks_in_html, :track_clicks_in_text ], :custom_args_xml => [
17
+ Proc.new do |builder, args|
18
+ unless args[:data].nil?
19
+ args[:data].each { |r| builder.data({ :type => r[:type] }, r[:value]) }
20
+ end
21
+ end
22
+ ]
23
+ method :name => "GetLogs", :requires => [ :user_key, :log_type ], :optional => [ :start_time, :end_time ]
24
+ end
25
+ end
26
+
27
+ class Relay
28
+ class << self
29
+ # Send an email using the Relay.
30
+ #
31
+ # Arguments :
32
+ # * args = { :user => required, :email => required, :sender_name => required, :sender_email => required, :subject => required,
33
+ # :html_message => optional, :text_message => optional, :encoding => optional, :track_opening => optional,
34
+ # :track_clicks_in_html => optional, :track_clicks_in_text => optional, :data => optional/custom }
35
+ # Custom format of :data :
36
+ # * [ { :type => "text", :name => "schedule" }, { :type => "text", :name => "schedule" }, ... ]
37
+ def send(args)
38
+ raise ArgumentError if args.nil? or args[:user] or args[:email].nil? or args[:sender_name] or args[:sender_email] or args[:subject]
39
+ options = { :user_key => args[:user].user_key, :email => args[:email], :sender_name => args[:sender_name],
40
+ :sender_email => args[:sender_email], :subject => args[:subject] }
41
+ options[:html_message] = args[:html_message] unless args[:html_message].nil?
42
+ options[:text_message] = args[:text_message] unless args[:text_message].nil?
43
+ options[:encoding] = args[:encoding] unless args[:encoding].nil?
44
+ options[:track_opening] = args[:track_opening] unless args[:track_opening].nil?
45
+ options[:track_clicks_in_html] = args[:track_clicks_in_html] unless args[:track_clicks_in_html].nil?
46
+ options[:track_clicks_in_text] = args[:track_clicks_in_text] unless args[:track_clicks_in_text].nil?
47
+ options[:data] = args[:data] unless args[:data].nil?
48
+ res = args[:user].session.request("CakeMail::API::ClassRelay", "Send", options)
49
+ end
50
+ # Retrieves logs from Relay.
51
+ #
52
+ # Arguments :
53
+ # * args = { :user => required, :log_type => required, :start_time => optional, :end_time => optional }
54
+ def get_logs(args)
55
+ raise ArgumentError if args.nil? or args[:user] or args[:log_type].nil?
56
+ options = { :user_key => args[:user].user_key, :log_type => args[:log_type] }
57
+ options[:start_time] = args[:start_time] unless args[:start_time].nil?
58
+ options[:end_time] = args[:end_time] unless args[:end_time].nil?
59
+ res = args[:user].session.request("CakeMail::API::ClassRelay", "Send", options)
60
+ return res['bounce_log']
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,46 @@
1
+ module CakeMail
2
+ class ServiceMethod
3
+ attr_reader :name, :requires, :optional
4
+
5
+ def initialize(name, requires, optional, custom_args_xml)
6
+ @name = name
7
+ @requires = requires
8
+ @optional = optional
9
+ @custom_args_xml = custom_args_xml
10
+ end
11
+
12
+ def to_xml(builder, args)
13
+ @requires.each do |arg|
14
+ raise ArgumentError.new(arg.to_s) unless args.has_key?(arg)
15
+ builder.__send__(arg.to_s, args[arg])
16
+ end
17
+ @optional.each do |arg|
18
+ builder.__send__(arg.to_s, args[arg]) if args.has_key?(arg)
19
+ end
20
+ @custom_args_xml.each do |arg|
21
+ arg.call(builder, args)
22
+ end
23
+ end
24
+ end
25
+
26
+ class ServiceClass
27
+ class InvalidMethod < Exception; end
28
+
29
+ def self.method(args)
30
+ raise ArgumentError.new("args or name missing") if args.nil? or args[:name].nil?
31
+ @methods ||= { }
32
+ name = args[:name]
33
+ @methods[name] = ServiceMethod.new(name, args[:requires] || [ ], args[:optional] || [ ], args[:custom_args_xml] || [ ])
34
+ end
35
+
36
+ def self.method_xml(builder, session, method, args)
37
+ raise ArgumentError.new("builder or session missing") if builder.nil? or session.nil?
38
+ raise InvalidMethod unless @methods.has_key?(method)
39
+ builder.class(:type => self.to_s.gsub(/.*::/, ''), :locale => session.class::API_LOCALE) do |klass|
40
+ klass.method(:type => method) do |meth|
41
+ @methods[method].to_xml(meth, args)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,70 @@
1
+ module CakeMail
2
+ class Session
3
+ class HttpRequestError < Exception; end
4
+ class ApiRequestError < Exception; end
5
+
6
+ API_SERVER_BASE_URL = "http://api.cakemail.com/"
7
+ API_VERSION = "1.0"
8
+ API_LOCALE = "en_US"
9
+
10
+ attr_reader :api_id, :api_key, :user_key
11
+
12
+ def initialize(api_id, api_key)
13
+ @api_id = api_id
14
+ @api_key = api_key
15
+ @crypto = Crypt::Blowfish.new(@api_key)
16
+ end
17
+ # Returns a logged in user.
18
+ def login(email, password)
19
+ user = CakeMail::User.login(self, email, password)
20
+ return user
21
+ end
22
+ # Recover password.
23
+ def password_recovery(email)
24
+ CakeMail::User.password_recovery(email)
25
+ end
26
+
27
+ def request(service_class, method, args)
28
+ builder = Builder::XmlMarkup.new(:indent => 1)
29
+ builder.instruct! :xml, :version => "1.0", :encoding => "utf-8"
30
+ req = builder.body(:version => API_VERSION) { |body| Object.module_eval(service_class).method_xml(body, self, method, args) }
31
+ res = Net::HTTP.post_form(URI.parse(API_SERVER_BASE_URL), {'alg' => 'blowfish', 'mode' => 'ecb', 'id' => @api_id, 'request' => encode(req)})
32
+ raise HttpRequestError if res.nil? || res.body.nil? || (res.code.to_i != 200)
33
+ r = XmlSimple.xml_in(decode(res.body))
34
+ raise ApiRequestError if r.nil? || !r.has_key?('class') || !r['class'].is_a?(Array)
35
+ r = r['class'].first
36
+ raise ApiRequestError if (r['type'] != service_class.gsub(/.*::/, '')) ||
37
+ !r['method'].is_a?(Array) || (r['method'].first['type'] != method)
38
+ r = r['method'].first
39
+ r = unescape_xmlsimple_result(r)
40
+ if r.has_key?('error_code')
41
+ error = "Error #{r['error_code'].first}"
42
+ error += ": #{CGI.unescape(r['error_message'].first)}" if r.has_key?('error_message')
43
+ error += " [#{service_class.to_s} :: #{method}]"
44
+ raise ApiRequestError.new(error)
45
+ end
46
+ return r
47
+ end
48
+
49
+ private
50
+ def encode(req)
51
+ @crypto.encrypt_string(req).unpack("H*").first
52
+ end
53
+
54
+ def decode(req)
55
+ @crypto.decrypt_string([req].pack("H*"))
56
+ end
57
+
58
+ def unescape_xmlsimple_result(data)
59
+ if data.is_a?(Hash)
60
+ newdata = { }
61
+ data.each { |k,v| newdata[k] = unescape_xmlsimple_result(v) }
62
+ newdata
63
+ elsif data.is_a?(Array)
64
+ data.map { |elem| unescape_xmlsimple_result(elem) }
65
+ elsif data.is_a?(String)
66
+ CGI.unescape(data)
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,102 @@
1
+ module CakeMail
2
+ module API
3
+ class ClassSuppressionList < CakeMail::ServiceClass
4
+ method :name => "ImportEmails", :requires => [ :user_key ], :custom_args_xml => [
5
+ Proc.new do |builder, args|
6
+ unless args[:email].nil?
7
+ args[:email].each { |r| builder.email(r) }
8
+ end
9
+ end
10
+ ]
11
+ method :name => "ExportEmails", :requires => [ :user_key ], :optional => [ :source_type, :limit, :offset, :count ]
12
+ method :name => "DeleteEmails", :requires => [ :user_key ], :custom_args_xml => [
13
+ Proc.new do |builder, args|
14
+ unless args[:email].nil?
15
+ args[:email].each { |r| builder.email(r) }
16
+ end
17
+ end
18
+ ]
19
+ method :name => "ImportDomains", :requires => [ :user_key ], :custom_args_xml => [
20
+ Proc.new do |builder, args|
21
+ unless args[:domain].nil?
22
+ args[:domain].each { |r| builder.domain(r) }
23
+ end
24
+ end
25
+ ]
26
+ method :name => "ExportDomains", :requires => [ :user_key ], :optional => [ :limit, :offset, :count ]
27
+ method :name => "DeleteDomains", :requires => [ :user_key ], :custom_args_xml => [
28
+ Proc.new do |builder, args|
29
+ unless args[:domain].nil?
30
+ args[:domain].each { |r| builder.domain(r) }
31
+ end
32
+ end
33
+ ]
34
+ end
35
+ end
36
+
37
+ class SuppressionList
38
+ class << self
39
+ # Imports one or more emails into the suppression list.
40
+ #
41
+ # Custom argument :
42
+ # emails = [ 'test@example.com', 'test2@example.com', ... ]
43
+ def import_emails(user, emails)
44
+ res = user.session.request("CakeMail::API::ClassSuppressionList", "ImportEmails", { :email => emails, :user_key => user.user_key })
45
+ end
46
+ # Exports the suppressed emails.
47
+ #
48
+ # Arguments :
49
+ # * args = { :user => required, :source_type => optional, :limit => optional, :count => optional, }
50
+ def export_emails(args)
51
+ raise ArgumentError if args.nil? or args[:user].nil?
52
+ options = { :user_key => args[:user].user_key }
53
+ options[:source_type] = arg[:source_type] unless arg[:source_type].nil?
54
+ options[:limit] = arg[:limit] unless arg[:limit].nil?
55
+ options[:offset] = arg[:offset] unless arg[:offset].nil?
56
+ options[:count] = arg[:count] unless arg[:count].nil?
57
+ res = arg[:user].session.request("CakeMail::API::ClassSuppressionList", "ExportEmails", options)
58
+ if !arg[:count].nil?
59
+ return res['count']
60
+ end
61
+ return res['record']
62
+ end
63
+ # Deletes one or more emails from the suppression list.
64
+ #
65
+ # Custom argument :
66
+ # emails = [ 'test@example.com', 'test2@example.com', ... ]
67
+ def delete_emails(user, emails)
68
+ res = user.session.request("CakeMail::API::ClassSuppressionList", "DeleteEmails", { :user_key => user.user_key, :email => emails })
69
+ end
70
+ # Imports one or more domains into the suppression list.
71
+ #
72
+ # Custom argument :
73
+ # * domains = [ 'domain1.com', 'domain2', ...]
74
+ def import_domains(user, domains)
75
+ res = user.session.request("CakeMail::API::ClassSuppressionList", "ImportDomains", { :domain => domains, :user_key => user.user_key })
76
+ end
77
+ # Exports the suppressed emails.
78
+ #
79
+ # Arguments :
80
+ # * args = { :user => required, :limit => optional, :offset => optional, :count => optional }
81
+ def export_domains(args)
82
+ raise ArgumentError if args.nil? or args[:user].nil?
83
+ options = { :user_key => args[:user].user_key }
84
+ options[:limit] = args[:limit] unless args[:limit].nil?
85
+ options[:offset] = args[:offset] unless args[:offset].nil?
86
+ options[:count] = args[:count] unless args[:count].nil?
87
+ res = args[:user].session.request("CakeMail::API::ClassSuppressionList", "ExportDomains", options)
88
+ if !args[:count].nil?
89
+ return res['count']
90
+ end
91
+ return res['record']
92
+ end
93
+ # Deletes one or more domains from the suppression list.
94
+ #
95
+ # Custom argument :
96
+ # * domains = [ 'domain1.com', 'domain2', ...]
97
+ def delete_domains(user, domains)
98
+ res = user.session.request("CakeMail::API::ClassSuppressionList", "DeleteDomains", { :user_key => user.user_key, :domain => domains })
99
+ end
100
+ end
101
+ end
102
+ end