socketlabs 0.1.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.
- data/Manifest +5 -0
- data/README.rdoc +55 -0
- data/Rakefile +14 -0
- data/lib/socketlabs.rb +91 -0
- data/socketlabs.gemspec +30 -0
- data/test/test.rb +23 -0
- metadata +79 -0
data/Manifest
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
= SocketLabs Gem
|
2
|
+
|
3
|
+
Ruby gem for sending email through SocketLabs Email On-Demand. SocketLabs Email On-Demand is a managed email delivery service featuring high deliverability, message tracking and rich statistics and reporting through a web control panel and API.
|
4
|
+
|
5
|
+
A SocketLabs Email On-Demand account is required to use this API. Basic SocketLabs Email On-Demand accounts are available for free, with paid plans available for more features and messages per month.
|
6
|
+
|
7
|
+
For more information visit: www.socketlabs.com
|
8
|
+
|
9
|
+
== Installation
|
10
|
+
|
11
|
+
sudo gem install socketlabs
|
12
|
+
|
13
|
+
== Bare Bones Example
|
14
|
+
|
15
|
+
# You can get the URL and serverToken from your control panel
|
16
|
+
require 'socketlabs'
|
17
|
+
SocketLabs.url="https://api.socketlabs.com/v1/email/send"
|
18
|
+
SocketLabs.serverToken = "13451345"
|
19
|
+
|
20
|
+
# You can instantiate the EmailMessage object and work with its properties and methods
|
21
|
+
msg = SocketLabs::EmailMessage.new
|
22
|
+
msg.from = 'sender@domain.com'
|
23
|
+
msg.to = 'recipient@domain.com'
|
24
|
+
msg.subject = 'Subject of message'
|
25
|
+
msg.textBody = 'This is the text message body.'
|
26
|
+
msg.send
|
27
|
+
|
28
|
+
== Other cool stuff you can do
|
29
|
+
|
30
|
+
# You can specify an HTML body in addition to or instead of a text body
|
31
|
+
msg.htmlBody = '<html><body>This is the text message body.</html></body>'
|
32
|
+
|
33
|
+
# You can merge data to a template you create online in the SocketLabs Email On-Demand control panel
|
34
|
+
msg.templateId="23498723"
|
35
|
+
msg.templateData={:firstName=>'John', :accountNumber=>'12345'}
|
36
|
+
|
37
|
+
# Templates even support data collections such as lines on an invoice
|
38
|
+
msg.templateData={:invoiceNumber=>'1234', :items=>{'Blue Widget'=>15, 'Red Widget'=>10}}
|
39
|
+
|
40
|
+
# When using the template and merge engine, you can even request a copy of the merged html and/or text body in the response.
|
41
|
+
msg.showme=true
|
42
|
+
|
43
|
+
# You can tag your messages with a campaign identifier and a message identifier which will show up in our online delivery reports and stats
|
44
|
+
msg.messageId='123456'
|
45
|
+
msg.mailingId='Campaign 9'
|
46
|
+
|
47
|
+
# You can specify custom headers
|
48
|
+
msg.headers = {:X-MyHeader=>'Value', :List-Unsubscribe=>'Value'}
|
49
|
+
|
50
|
+
# Or just do a quick and dirty one liner to construct and send an email
|
51
|
+
SocketLabs::SendQuickMessage("recipient@domain.com", "sender@domain.com", "subject", "body")
|
52
|
+
|
53
|
+
== Copyright
|
54
|
+
|
55
|
+
Copyright (c)2010 SocketLabs, Inc.
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Echoe.new('socketlabs', '0.1.0') do |p|
|
6
|
+
p.description = "Send email through SocketLabs."
|
7
|
+
p.url = "http://github.com/socketlabs/socketlabs"
|
8
|
+
p.author = "John Alessi"
|
9
|
+
p.email = "john@socketlabs.com "
|
10
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
11
|
+
p.development_dependencies = []
|
12
|
+
end
|
13
|
+
|
14
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
data/lib/socketlabs.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'json'
|
3
|
+
require 'net/http'
|
4
|
+
require 'net/https'
|
5
|
+
|
6
|
+
module SocketLabs
|
7
|
+
|
8
|
+
class << self
|
9
|
+
attr_accessor :max_attempts, :url, :serverToken, :ssl
|
10
|
+
def max_attempts
|
11
|
+
@max_attempts ||= 3
|
12
|
+
end
|
13
|
+
def ssl
|
14
|
+
@ssl || (true)
|
15
|
+
end
|
16
|
+
def port
|
17
|
+
@port || (ssl ? 443 : 80)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
class EmailMessage
|
23
|
+
|
24
|
+
attr_accessor :to, :from, :cc, :bcc, :subject, :template, :textBody, :htmlBody, :messageId, :mailingId, :replyTo, :headers
|
25
|
+
|
26
|
+
def send
|
27
|
+
msg = Hash.new
|
28
|
+
msg['From']=from
|
29
|
+
msg['To']=to
|
30
|
+
msg['Cc']=cc
|
31
|
+
msg['Bcc']=bcc
|
32
|
+
msg['Subject']=subject
|
33
|
+
msg['Template']=template
|
34
|
+
msg['TextBody']=textBody
|
35
|
+
msg['HtmlBody']=htmlBody
|
36
|
+
msg['ReplyTo']=replyTo
|
37
|
+
msg['Headers'] = headers
|
38
|
+
SocketLabs::SendRawHashMessage(msg);
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.SendQuickMessage(from, to, subject, textBody, options={})
|
44
|
+
msg = Hash.new
|
45
|
+
msg['From']=from
|
46
|
+
msg['To']=to
|
47
|
+
msg['Subject']=subject
|
48
|
+
msg['TextBody']=textBody
|
49
|
+
options.each do | k, v |
|
50
|
+
msg['Bcc']=v if k=="bcc"
|
51
|
+
msg['Cc']=cc if k=="cc"
|
52
|
+
msg['Template']=template if k=="template"
|
53
|
+
msg['HtmlBody']=htmlBody if k=="htmlBody"
|
54
|
+
msg['ReplyTo']=replyTo if k=="replyTo"
|
55
|
+
msg['Headers'] = headers if k=="headers"
|
56
|
+
end
|
57
|
+
SocketLabs::SendRawHashMessage(msg);
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.SendRawHashMessage(msgHash)
|
61
|
+
SocketLabs::SendRawJsonMessage(msgHash.to_json)
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.SendRawJsonMessage(msgJson)
|
65
|
+
@attempt = 1
|
66
|
+
begin
|
67
|
+
api_url = URI.parse(url)
|
68
|
+
req = Net::HTTP::Post.new(api_url.path)
|
69
|
+
#req.basic_auth user, pw
|
70
|
+
req.body=msgJson
|
71
|
+
req.set_content_type('application/x-www-form-urlencoded')
|
72
|
+
req.delete("Accept")
|
73
|
+
req.add_field("Accept", "application/json")
|
74
|
+
req.add_field("Content-Type", "application/json; charset=utf-8")
|
75
|
+
req.add_field("User-Agent", "SocketLabs Ruby Gem")
|
76
|
+
req.add_field("X-Server-Token", serverToken)
|
77
|
+
http = Net::HTTP.new(api_url.host, @port)
|
78
|
+
http.use_ssl= @ssl
|
79
|
+
res = http.start {|http| http.request(req) }
|
80
|
+
rescue Exception => e
|
81
|
+
if @attempt < max_attempts
|
82
|
+
@attempt += 1
|
83
|
+
retry
|
84
|
+
else
|
85
|
+
raise
|
86
|
+
end
|
87
|
+
end
|
88
|
+
res.body
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
data/socketlabs.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{socketlabs}
|
5
|
+
s.version = "0.1.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["John Alessi"]
|
9
|
+
s.date = %q{2010-10-14}
|
10
|
+
s.description = %q{Send email through SocketLabs.}
|
11
|
+
s.email = %q{john@socketlabs.com }
|
12
|
+
s.extra_rdoc_files = ["README.rdoc", "lib/socketlabs.rb"]
|
13
|
+
s.files = ["README.rdoc", "Rakefile", "lib/socketlabs.rb", "test/test.rb", "Manifest", "socketlabs.gemspec"]
|
14
|
+
s.homepage = %q{http://github.com/socketlabs/socketlabs}
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Socketlabs", "--main", "README.rdoc"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = %q{socketlabs}
|
18
|
+
s.rubygems_version = %q{1.3.7}
|
19
|
+
s.summary = %q{Send email through SocketLabs.}
|
20
|
+
|
21
|
+
if s.respond_to? :specification_version then
|
22
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
23
|
+
s.specification_version = 3
|
24
|
+
|
25
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
26
|
+
else
|
27
|
+
end
|
28
|
+
else
|
29
|
+
end
|
30
|
+
end
|
data/test/test.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'socketlabs'
|
2
|
+
|
3
|
+
SocketLabs.max_attempts=1
|
4
|
+
SocketLabs.url="http://api.test.socketlabs.com/v1/email/send"
|
5
|
+
SocketLabs.ssl=false
|
6
|
+
SocketLabs.serverToken='API_TEST_TOKEN'
|
7
|
+
|
8
|
+
msg = SocketLabs::EmailMessage.new
|
9
|
+
msg.from = 'john.alessi@gmail.com'
|
10
|
+
msg.to = 'john@socketlabs.com'
|
11
|
+
msg.subject = 'test message subject'
|
12
|
+
msg.textBody = 'test message body'
|
13
|
+
#msg.send
|
14
|
+
begin
|
15
|
+
jsonResult=SocketLabs::SendQuickMessage("john@socketlabs.com", "john@socketlabs.com", "subject", "body")
|
16
|
+
hashResult = JSON.parse(jsonResult)
|
17
|
+
raise if hashResult['error']!=nil
|
18
|
+
puts jsonResult
|
19
|
+
rescue
|
20
|
+
puts 'There was an error processing your request.'
|
21
|
+
|
22
|
+
end
|
23
|
+
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: socketlabs
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- John Alessi
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-10-14 00:00:00 -04:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: Send email through SocketLabs.
|
23
|
+
email: "john@socketlabs.com "
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files:
|
29
|
+
- README.rdoc
|
30
|
+
- lib/socketlabs.rb
|
31
|
+
files:
|
32
|
+
- README.rdoc
|
33
|
+
- Rakefile
|
34
|
+
- lib/socketlabs.rb
|
35
|
+
- test/test.rb
|
36
|
+
- Manifest
|
37
|
+
- socketlabs.gemspec
|
38
|
+
has_rdoc: true
|
39
|
+
homepage: http://github.com/socketlabs/socketlabs
|
40
|
+
licenses: []
|
41
|
+
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options:
|
44
|
+
- --line-numbers
|
45
|
+
- --inline-source
|
46
|
+
- --title
|
47
|
+
- Socketlabs
|
48
|
+
- --main
|
49
|
+
- README.rdoc
|
50
|
+
require_paths:
|
51
|
+
- lib
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
hash: 11
|
67
|
+
segments:
|
68
|
+
- 1
|
69
|
+
- 2
|
70
|
+
version: "1.2"
|
71
|
+
requirements: []
|
72
|
+
|
73
|
+
rubyforge_project: socketlabs
|
74
|
+
rubygems_version: 1.3.7
|
75
|
+
signing_key:
|
76
|
+
specification_version: 3
|
77
|
+
summary: Send email through SocketLabs.
|
78
|
+
test_files: []
|
79
|
+
|