gmail_sender 0.2.0 → 0.3.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/README.rdoc +6 -0
- data/VERSION +1 -1
- data/bin/gmail +12 -1
- data/gmail_sender.gemspec +13 -10
- data/lib/gmail_sender.rb +52 -11
- data/test/gmail_sender_test.rb +3 -1
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -6,6 +6,7 @@ A simple gem to send email through gmail
|
|
6
6
|
require 'gmail_sender'
|
7
7
|
|
8
8
|
g = GmailSender.new("gmail_account_user_name", "gmail_account_password")
|
9
|
+
g.attach('/path/to/document.hz') # you can attach any number of files, but there are limits for total attachments size
|
9
10
|
g.send("someone@domain.com", "The subject", "The mail body")
|
10
11
|
|
11
12
|
== Command line usage
|
@@ -27,6 +28,10 @@ To send your directory list to the default receiver:
|
|
27
28
|
You can specify some parameters like in this example which doesn't use pipes:
|
28
29
|
|
29
30
|
gmail -t somebody@gmail.com -s "This is the subject" -c "This is the email content"
|
31
|
+
|
32
|
+
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):
|
33
|
+
|
34
|
+
gmail -c "hi, I'm sending some attachments" -a ./VERSION ./gmail_sender.gemspec
|
30
35
|
|
31
36
|
== Requirements
|
32
37
|
|
@@ -36,3 +41,4 @@ tlsmail if running Ruby 1.8.6
|
|
36
41
|
|
37
42
|
* Daniel Cadenas - Maintainer
|
38
43
|
* Felipe Coury
|
44
|
+
* iwakura
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/bin/gmail
CHANGED
@@ -25,6 +25,13 @@ Choice.options do
|
|
25
25
|
long '--content=MAIL_CONTENTS'
|
26
26
|
desc 'Body of the email, uses STDIN if omitted'
|
27
27
|
end
|
28
|
+
|
29
|
+
option :attachments do
|
30
|
+
short '-a'
|
31
|
+
long '--attachments *ATTACHMENTS'
|
32
|
+
desc "A list of space separated list of files you wish to attach."
|
33
|
+
end
|
34
|
+
|
28
35
|
end
|
29
36
|
|
30
37
|
def params
|
@@ -48,4 +55,8 @@ end
|
|
48
55
|
|
49
56
|
|
50
57
|
mailer = GmailSender.new(params['sender_user'], params['sender_password'], params['sender_domain'])
|
51
|
-
|
58
|
+
params['attachments'].each do |attachment|
|
59
|
+
mailer.attach(attachment)
|
60
|
+
end
|
61
|
+
content = params['content'] || (params['attachments'] && params['attachments'].join("\n"))
|
62
|
+
mailer.send(params['receiver_email'], params['subject'], content || STDIN.read)
|
data/gmail_sender.gemspec
CHANGED
@@ -1,18 +1,21 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
1
4
|
# -*- encoding: utf-8 -*-
|
2
5
|
|
3
6
|
Gem::Specification.new do |s|
|
4
7
|
s.name = %q{gmail_sender}
|
5
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
6
9
|
|
7
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = ["Daniel Cadenas"
|
9
|
-
s.date = %q{2009-
|
10
|
-
s.
|
11
|
-
s.
|
11
|
+
s.authors = ["Daniel Cadenas"]
|
12
|
+
s.date = %q{2009-12-24}
|
13
|
+
s.default_executable = %q{gmail}
|
14
|
+
s.email = %q{dcadenas@gmail.com}
|
12
15
|
s.executables = ["gmail"]
|
13
16
|
s.extra_rdoc_files = [
|
14
17
|
"LICENSE",
|
15
|
-
|
18
|
+
"README.rdoc"
|
16
19
|
]
|
17
20
|
s.files = [
|
18
21
|
".document",
|
@@ -21,8 +24,8 @@ Gem::Specification.new do |s|
|
|
21
24
|
"README.rdoc",
|
22
25
|
"Rakefile",
|
23
26
|
"VERSION",
|
24
|
-
"gmail_sender.gemspec",
|
25
27
|
"bin/gmail",
|
28
|
+
"gmail_sender.gemspec",
|
26
29
|
"lib/gmail_sender.rb",
|
27
30
|
"lib/tls_smtp_patch.rb",
|
28
31
|
"test/gmail_sender_test.rb",
|
@@ -31,8 +34,8 @@ Gem::Specification.new do |s|
|
|
31
34
|
s.homepage = %q{http://github.com/dcadenas/gmail_sender}
|
32
35
|
s.rdoc_options = ["--charset=UTF-8"]
|
33
36
|
s.require_paths = ["lib"]
|
34
|
-
s.rubygems_version = %q{1.3.
|
35
|
-
s.summary =
|
37
|
+
s.rubygems_version = %q{1.3.5}
|
38
|
+
s.summary = %q{A simple gem to send email through gmail}
|
36
39
|
s.test_files = [
|
37
40
|
"test/gmail_sender_test.rb",
|
38
41
|
"test/test_helper.rb"
|
@@ -43,9 +46,9 @@ Gem::Specification.new do |s|
|
|
43
46
|
s.specification_version = 3
|
44
47
|
|
45
48
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
46
|
-
s.add_runtime_dependency(%q<choice>, [">= 0"])
|
47
49
|
else
|
48
50
|
end
|
49
51
|
else
|
50
52
|
end
|
51
53
|
end
|
54
|
+
|
data/lib/gmail_sender.rb
CHANGED
@@ -1,28 +1,69 @@
|
|
1
|
+
require 'base64'
|
1
2
|
require "tls_smtp_patch"
|
2
3
|
|
3
4
|
class GmailSender
|
5
|
+
|
6
|
+
ATTACHMENT_READ_PORTION = 150360 # you may change this, but must be multiply to 3
|
7
|
+
|
4
8
|
def initialize(user, password, domain="gmail.com")
|
5
9
|
@sender_domain = domain
|
6
10
|
@sender_password = password
|
7
11
|
@sender_email = "#{user}@#{domain}"
|
8
12
|
@net_smtp = Net::SMTP.new("smtp.gmail.com", 587)
|
9
|
-
@net_smtp.enable_starttls
|
13
|
+
@net_smtp.enable_starttls
|
14
|
+
@attachments = []
|
15
|
+
@boundary = rand(2**256).to_s(16)
|
16
|
+
end
|
17
|
+
|
18
|
+
def attach(file)
|
19
|
+
@attachments << file if File.exist?(file)
|
10
20
|
end
|
11
21
|
|
12
|
-
def send(to, subject, content)
|
22
|
+
def send(to, subject = "", content = "")
|
13
23
|
@net_smtp.start(@sender_domain, @sender_email, @sender_password, :plain) do |smtp|
|
14
|
-
|
15
|
-
|
24
|
+
smtp.open_message_stream(@sender_email, [to]) do |msg_stream|
|
25
|
+
set_message_stream(msg_stream, to, subject, content)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def set_message_stream(msg_stream, to, subject, content)
|
31
|
+
set_headers(msg_stream, to, subject)
|
32
|
+
set_content(msg_stream, content)
|
33
|
+
set_attachments(msg_stream)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def set_headers(msg_stream, to, subject)
|
38
|
+
msg_stream.puts "From: #{@sender_email}"
|
39
|
+
msg_stream.puts "To: #{to}"
|
40
|
+
msg_stream.puts "Subject: #{subject}"
|
41
|
+
unless @attachments.empty?
|
42
|
+
msg_stream.puts 'MIME-Version: 1.0'
|
43
|
+
msg_stream.puts %{Content-Type: multipart/mixed; boundary="#{@boundary}"}
|
44
|
+
end
|
45
|
+
msg_stream.puts
|
46
|
+
unless @attachments.empty?
|
47
|
+
msg_stream.puts "--#{@boundary}"
|
48
|
+
msg_stream.puts 'Content-Type: text/plain'
|
16
49
|
end
|
17
50
|
end
|
18
51
|
|
19
|
-
def
|
20
|
-
|
21
|
-
|
22
|
-
To: #{to}
|
23
|
-
Subject: #{subject}
|
52
|
+
def set_content(msg_stream, content)
|
53
|
+
msg_stream.puts content
|
54
|
+
end
|
24
55
|
|
25
|
-
|
26
|
-
|
56
|
+
def set_attachments(msg_stream)
|
57
|
+
@attachments.each do |file|
|
58
|
+
msg_stream.puts "--#{@boundary}"
|
59
|
+
msg_stream.puts %{Content-Type: application/octet-stream; name="#{File.basename(file)}"}
|
60
|
+
msg_stream.puts %{Content-Disposition: attachment; filename="#{File.basename(file)}"}
|
61
|
+
msg_stream.puts 'Content-Transfer-Encoding: base64'
|
62
|
+
msg_stream.puts "Content-ID: <#{File.basename(file)}>"
|
63
|
+
msg_stream.puts
|
64
|
+
File.open(file) do |fd|
|
65
|
+
msg_stream.puts Base64.encode64(fd.read(ATTACHMENT_READ_PORTION)) until fd.eof?
|
66
|
+
end
|
67
|
+
end
|
27
68
|
end
|
28
69
|
end
|
data/test/gmail_sender_test.rb
CHANGED
@@ -3,6 +3,8 @@ require 'test_helper'
|
|
3
3
|
Expectations do
|
4
4
|
expect "From: gmail_account_name@gmail.com\nTo: to@gmail.com\nSubject: subject\n\nbody\n" do
|
5
5
|
gmail_sender = GmailSender.new("gmail_account_name", "gmail_account_password")
|
6
|
-
|
6
|
+
string_io = StringIO.new
|
7
|
+
gmail_sender.set_message_stream(string_io, "to@gmail.com", "subject", "body")
|
8
|
+
string_io.string
|
7
9
|
end
|
8
10
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gmail_sender
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Cadenas
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-24 00:00:00 -02:00
|
13
13
|
default_executable: gmail
|
14
14
|
dependencies: []
|
15
15
|
|