gmail_sender 0.4.0 → 1.0.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/.gitignore +1 -0
- data/README.rdoc +17 -2
- data/VERSION +1 -1
- data/bin/gmail +9 -2
- data/gmail_sender.gemspec +5 -3
- data/lib/gmail_sender/error.rb +4 -0
- data/lib/gmail_sender/message_stream_writer.rb +6 -6
- data/lib/gmail_sender/utils.rb +7 -0
- data/lib/gmail_sender.rb +11 -2
- data/test/gmail_sender_test.rb +9 -4
- data/test/message_stream_writer_test.rb +4 -4
- metadata +26 -13
data/.gitignore
CHANGED
data/README.rdoc
CHANGED
@@ -7,7 +7,14 @@ A simple gem to send email through gmail
|
|
7
7
|
|
8
8
|
g = GmailSender.new("gmail_account_user_name", "gmail_account_password")
|
9
9
|
g.attach('/path/to/document.hz') # you can attach any number of files, but there are limits for total attachments size
|
10
|
-
g.send("someone@domain.com", "The subject", "The mail body")
|
10
|
+
g.send(:to => "someone@domain.com", :subject => "The subject", :content => "The mail body")
|
11
|
+
|
12
|
+
You can specify the content type which is text/plain by default.
|
13
|
+
|
14
|
+
g.send(:to => "someone@domain.com",
|
15
|
+
:subject => "The subject",
|
16
|
+
:content => "<img src='http://upload.wikimedia.org/wikipedia/en/0/0d/Simpsons_FamilyPicture.png'/>",
|
17
|
+
:content_type => 'text/html')
|
11
18
|
|
12
19
|
To use your google apps domain instead of gmail.com include the complete sender email instead of just the user name:
|
13
20
|
|
@@ -36,7 +43,15 @@ You can specify some parameters like in this example which doesn't use pipes:
|
|
36
43
|
You can send attachments by using the -a option (this example assumes that you have a receiver_email set in the ~/.gmail file so the -t is not needed):
|
37
44
|
|
38
45
|
gmail -c "hi, I'm sending some attachments" -a ./VERSION ./gmail_sender.gemspec
|
39
|
-
|
46
|
+
|
47
|
+
To send html content use the ct option
|
48
|
+
|
49
|
+
gmail -c "<img src='http://upload.wikimedia.org/wikipedia/en/0/0d/Simpsons_FamilyPicture.png'/>" -ct text/html
|
50
|
+
|
51
|
+
== Installation
|
52
|
+
|
53
|
+
sudo gem install gmail_sender
|
54
|
+
|
40
55
|
== Requirements
|
41
56
|
|
42
57
|
tlsmail if running Ruby 1.8.6
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0
|
data/bin/gmail
CHANGED
@@ -26,6 +26,12 @@ Choice.options do
|
|
26
26
|
desc 'Body of the email, uses STDIN if omitted'
|
27
27
|
end
|
28
28
|
|
29
|
+
option :content_type do
|
30
|
+
short '-ct'
|
31
|
+
long '--content_type=CONTENT_TYPE'
|
32
|
+
desc 'Content Type, text/plain by default, use text/html for html'
|
33
|
+
end
|
34
|
+
|
29
35
|
option :attachments do
|
30
36
|
short '-a'
|
31
37
|
long '--attachments *ATTACHMENTS'
|
@@ -48,7 +54,8 @@ def params
|
|
48
54
|
end
|
49
55
|
|
50
56
|
defaults = {'subject' => 'Sent from command line',
|
51
|
-
'sender_domain' => 'gmail.com'
|
57
|
+
'sender_domain' => 'gmail.com',
|
58
|
+
'content_type' => 'text/plain'}
|
52
59
|
|
53
60
|
@params = defaults.merge(YAML.load_file(config_file_path)).merge(Choice.choices)
|
54
61
|
end
|
@@ -61,4 +68,4 @@ if params['attachments']
|
|
61
68
|
end
|
62
69
|
end
|
63
70
|
content = params['content'] || (params['attachments'] && params['attachments'].join("\n"))
|
64
|
-
mailer.send(params['receiver_email'], params['subject'], content || STDIN.read)
|
71
|
+
mailer.send(:to => params['receiver_email'], :subject => params['subject'], :content => content || STDIN.read, :content_type => params['content_type'])
|
data/gmail_sender.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{gmail_sender}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Daniel Cadenas"]
|
12
|
-
s.date = %q{2010-02-
|
12
|
+
s.date = %q{2010-02-28}
|
13
13
|
s.default_executable = %q{gmail}
|
14
14
|
s.email = %q{dcadenas@gmail.com}
|
15
15
|
s.executables = ["gmail"]
|
@@ -27,7 +27,9 @@ Gem::Specification.new do |s|
|
|
27
27
|
"bin/gmail",
|
28
28
|
"gmail_sender.gemspec",
|
29
29
|
"lib/gmail_sender.rb",
|
30
|
+
"lib/gmail_sender/error.rb",
|
30
31
|
"lib/gmail_sender/message_stream_writer.rb",
|
32
|
+
"lib/gmail_sender/utils.rb",
|
31
33
|
"lib/tls_smtp_patch.rb",
|
32
34
|
"test/gmail_sender_test.rb",
|
33
35
|
"test/message_stream_writer_test.rb",
|
@@ -36,7 +38,7 @@ Gem::Specification.new do |s|
|
|
36
38
|
s.homepage = %q{http://github.com/dcadenas/gmail_sender}
|
37
39
|
s.rdoc_options = ["--charset=UTF-8"]
|
38
40
|
s.require_paths = ["lib"]
|
39
|
-
s.rubygems_version = %q{1.3.
|
41
|
+
s.rubygems_version = %q{1.3.6}
|
40
42
|
s.summary = %q{A simple gem to send email through gmail}
|
41
43
|
s.test_files = [
|
42
44
|
"test/gmail_sender_test.rb",
|
@@ -10,9 +10,9 @@ class GmailSender
|
|
10
10
|
@boundary = rand(2**256).to_s(16)
|
11
11
|
end
|
12
12
|
|
13
|
-
def write(msg_stream, to, subject, content)
|
13
|
+
def write(msg_stream, to, subject, content, content_type)
|
14
14
|
write_headers(msg_stream, to, subject)
|
15
|
-
write_content(msg_stream, content)
|
15
|
+
write_content(msg_stream, content, content_type)
|
16
16
|
write_attachments(msg_stream)
|
17
17
|
end
|
18
18
|
|
@@ -21,19 +21,19 @@ class GmailSender
|
|
21
21
|
msg_stream.puts "From: #{@sender_email}"
|
22
22
|
msg_stream.puts "To: #{to}"
|
23
23
|
msg_stream.puts "Subject: #{subject}"
|
24
|
+
msg_stream.puts 'MIME-Version: 1.0'
|
24
25
|
unless @attachments.empty?
|
25
|
-
msg_stream.puts 'MIME-Version: 1.0'
|
26
26
|
msg_stream.puts %{Content-Type: multipart/mixed; boundary="#{@boundary}"}
|
27
27
|
end
|
28
|
-
msg_stream.puts
|
29
28
|
end
|
30
29
|
|
31
|
-
def write_content(msg_stream, content)
|
30
|
+
def write_content(msg_stream, content, content_type)
|
32
31
|
unless @attachments.empty?
|
33
32
|
msg_stream.puts "--#{@boundary}" unless @attachments.empty?
|
34
|
-
msg_stream.puts 'Content-Type: text/plain'
|
35
33
|
end
|
36
34
|
|
35
|
+
msg_stream.puts "Content-Type: #{content_type}"
|
36
|
+
msg_stream.puts
|
37
37
|
msg_stream.puts content
|
38
38
|
end
|
39
39
|
|
data/lib/gmail_sender.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'base64'
|
2
2
|
require 'tls_smtp_patch'
|
3
3
|
require 'gmail_sender/message_stream_writer'
|
4
|
+
require 'gmail_sender/utils'
|
5
|
+
require 'gmail_sender/error'
|
4
6
|
|
5
7
|
class GmailSender
|
6
8
|
def initialize(user_or_email, password, net_smtp_class = Net::SMTP, message_stream_writer_class = MessageStreamWriter)
|
@@ -19,10 +21,17 @@ class GmailSender
|
|
19
21
|
@message_stream_writer.attachments << file if File.exist?(file)
|
20
22
|
end
|
21
23
|
|
22
|
-
def send(
|
24
|
+
def send(options = {})
|
25
|
+
to = options[:to]
|
26
|
+
subject = options[:subject] || ""
|
27
|
+
content = options[:content] || ""
|
28
|
+
content_type = options[:content_type] || "text/plain; charset='utf-8'"
|
29
|
+
|
30
|
+
raise(Error, "Missing receiver (:to => 'someone@somehost.com')") if Utils.blank?(to)
|
31
|
+
|
23
32
|
@net_smtp.start(@sender_domain, @sender_email, @sender_password, :plain) do |smtp|
|
24
33
|
smtp.open_message_stream(@sender_email, [to]) do |msg_stream|
|
25
|
-
@message_stream_writer.write(msg_stream, to, subject, content)
|
34
|
+
@message_stream_writer.write(msg_stream, to, subject, content, content_type)
|
26
35
|
end
|
27
36
|
end
|
28
37
|
end
|
data/test/gmail_sender_test.rb
CHANGED
@@ -23,15 +23,20 @@ class FakedNetSMTP
|
|
23
23
|
end
|
24
24
|
|
25
25
|
Expectations do
|
26
|
-
expect "From: me@gmail.com\nTo: someone@somehost.com\nSubject: hi!\n\nho\n" do
|
26
|
+
expect "From: me@gmail.com\nTo: someone@somehost.com\nSubject: hi!\nMIME-Version: 1.0\nContent-Type: text/plain; charset='utf-8'\n\nho\n" do
|
27
27
|
gmail_sender = GmailSender.new("me", "password", FakedNetSMTP)
|
28
|
-
gmail_sender.send("someone@somehost.com", "hi!", "ho")
|
28
|
+
gmail_sender.send(:to => "someone@somehost.com", :subject => "hi!", :content => "ho")
|
29
29
|
FakedNetSMTP.sent_email
|
30
30
|
end
|
31
31
|
|
32
|
-
expect "From: me@somehost.com\nTo: someone@someotherhost.com\nSubject: hi!\n\nho\n" do
|
32
|
+
expect "From: me@somehost.com\nTo: someone@someotherhost.com\nSubject: hi!\nMIME-Version: 1.0\nContent-Type: text/plain; charset='utf-8'\n\nho\n" do
|
33
33
|
gmail_sender = GmailSender.new("me@somehost.com", "password", FakedNetSMTP)
|
34
|
-
gmail_sender.send("someone@someotherhost.com", "hi!", "ho")
|
34
|
+
gmail_sender.send(:to => "someone@someotherhost.com", :subject => "hi!", :content => "ho")
|
35
35
|
FakedNetSMTP.sent_email
|
36
36
|
end
|
37
|
+
|
38
|
+
expect GmailSender::Error do
|
39
|
+
gmail_sender = GmailSender.new("me@somehost.com", "password", FakedNetSMTP)
|
40
|
+
gmail_sender.send(:subject => "hi!", :content => "ho")
|
41
|
+
end
|
37
42
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
Expectations do
|
4
|
-
expect "From: sender@gmail.com\nTo: to@gmail.com\nSubject: subject\n\nbody\n" do
|
4
|
+
expect "From: sender@gmail.com\nTo: to@gmail.com\nSubject: subject\nMIME-Version: 1.0\nContent-Type: text/plain\n\nbody\n" do
|
5
5
|
string_io = StringIO.new
|
6
6
|
message_stream_writer = GmailSender::MessageStreamWriter.new("sender@gmail.com")
|
7
|
-
message_stream_writer.write(string_io, "to@gmail.com", "subject", "body")
|
7
|
+
message_stream_writer.write(string_io, "to@gmail.com", "subject", "body", "text/plain")
|
8
8
|
string_io.string
|
9
9
|
end
|
10
10
|
|
@@ -14,9 +14,9 @@ To: to@gmail.com
|
|
14
14
|
Subject: subject
|
15
15
|
MIME-Version: 1.0
|
16
16
|
Content-Type: multipart\\/mixed; boundary="([a-f0-9]+)"
|
17
|
-
|
18
17
|
--\\1
|
19
18
|
Content-Type: text\\/plain
|
19
|
+
|
20
20
|
body
|
21
21
|
--\\1
|
22
22
|
Content-Type: application\\/octet-stream; name="first_file.txt"
|
@@ -40,7 +40,7 @@ MAIL_WITH_ATTACHMENT_REGEXP
|
|
40
40
|
message_stream_writer.attachments << "second_file.txt"
|
41
41
|
|
42
42
|
with_files("first_file.txt" => "this is the first file content", "second_file.txt" => "and this is the second file content") do
|
43
|
-
message_stream_writer.write(string_io, "to@gmail.com", "subject", "body")
|
43
|
+
message_stream_writer.write(string_io, "to@gmail.com", "subject", "body", "text/plain")
|
44
44
|
end
|
45
45
|
|
46
46
|
string_io.string
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gmail_sender
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 1.0.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Daniel Cadenas
|
@@ -9,29 +14,33 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-02-
|
17
|
+
date: 2010-02-28 00:00:00 -02:00
|
13
18
|
default_executable: gmail
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: expectations
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
23
29
|
version: "0"
|
24
|
-
|
30
|
+
type: :development
|
31
|
+
version_requirements: *id001
|
25
32
|
- !ruby/object:Gem::Dependency
|
26
33
|
name: filetesthelper
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - ">="
|
32
38
|
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
33
41
|
version: "0"
|
34
|
-
|
42
|
+
type: :development
|
43
|
+
version_requirements: *id002
|
35
44
|
description:
|
36
45
|
email: dcadenas@gmail.com
|
37
46
|
executables:
|
@@ -51,7 +60,9 @@ files:
|
|
51
60
|
- bin/gmail
|
52
61
|
- gmail_sender.gemspec
|
53
62
|
- lib/gmail_sender.rb
|
63
|
+
- lib/gmail_sender/error.rb
|
54
64
|
- lib/gmail_sender/message_stream_writer.rb
|
65
|
+
- lib/gmail_sender/utils.rb
|
55
66
|
- lib/tls_smtp_patch.rb
|
56
67
|
- test/gmail_sender_test.rb
|
57
68
|
- test/message_stream_writer_test.rb
|
@@ -69,18 +80,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
69
80
|
requirements:
|
70
81
|
- - ">="
|
71
82
|
- !ruby/object:Gem::Version
|
83
|
+
segments:
|
84
|
+
- 0
|
72
85
|
version: "0"
|
73
|
-
version:
|
74
86
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
87
|
requirements:
|
76
88
|
- - ">="
|
77
89
|
- !ruby/object:Gem::Version
|
90
|
+
segments:
|
91
|
+
- 0
|
78
92
|
version: "0"
|
79
|
-
version:
|
80
93
|
requirements: []
|
81
94
|
|
82
95
|
rubyforge_project:
|
83
|
-
rubygems_version: 1.3.
|
96
|
+
rubygems_version: 1.3.6
|
84
97
|
signing_key:
|
85
98
|
specification_version: 3
|
86
99
|
summary: A simple gem to send email through gmail
|