ez-email 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +2 -0
- data/MANIFEST +6 -0
- data/README +37 -0
- data/lib/ez/email.rb +135 -0
- data/test/test_ez_email.rb +76 -0
- metadata +62 -0
data/CHANGES
ADDED
data/MANIFEST
ADDED
data/README
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
= Description
|
2
|
+
A very easy interface for sending simple text based emails.
|
3
|
+
|
4
|
+
= Synopsis
|
5
|
+
require 'ez/email'
|
6
|
+
|
7
|
+
EZ::Email.deliver(
|
8
|
+
:to => 'your_friend@hotstuff.com',
|
9
|
+
:from => 'you@blah.com',
|
10
|
+
:subject => 'Hello',
|
11
|
+
:body => 'How are you?'
|
12
|
+
)
|
13
|
+
|
14
|
+
= Installation
|
15
|
+
gem install ez-email (rubygems)
|
16
|
+
rake install (manual installation)
|
17
|
+
|
18
|
+
= Rationale
|
19
|
+
The present batch of email handling libraries are either not designed
|
20
|
+
for sending email, or are extremely cumbersome, have lousy interfaces,
|
21
|
+
or are no longer maintained.
|
22
|
+
|
23
|
+
I just want to sent a flippin' email! This library scratched that itch.
|
24
|
+
Hopefully you will find its simplicity useful, too.
|
25
|
+
|
26
|
+
= Bugs
|
27
|
+
None that I'm aware of. Please log any bug reports on the project page at
|
28
|
+
http://www.rubyforge.org/projects/shards.
|
29
|
+
|
30
|
+
= License
|
31
|
+
Ruby's
|
32
|
+
|
33
|
+
= Copyright
|
34
|
+
(C) 2009, Daniel J. Berger, All Rights Reserved
|
35
|
+
|
36
|
+
= Author
|
37
|
+
Daniel Berger
|
data/lib/ez/email.rb
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
require 'resolv'
|
2
|
+
require 'etc'
|
3
|
+
require 'socket'
|
4
|
+
require 'net/smtp'
|
5
|
+
|
6
|
+
# The EZ module serves as a namespace only.
|
7
|
+
module EZ
|
8
|
+
|
9
|
+
# The Email class encapsulates certain SMTP attributes, which are then
|
10
|
+
# used to send simple emails.
|
11
|
+
class Email
|
12
|
+
# The version of this library
|
13
|
+
VERSION = '0.1.0'
|
14
|
+
|
15
|
+
@@mail_host = Resolv.getaddress('mailhost')
|
16
|
+
@@mail_port = 25
|
17
|
+
|
18
|
+
# The name of the mail host to use when sending email. The default
|
19
|
+
# is whatever the address of your system's 'mailhost' resolves to.
|
20
|
+
def self.mail_host
|
21
|
+
@@mail_host
|
22
|
+
end
|
23
|
+
|
24
|
+
# Sets the mail host.
|
25
|
+
def self.mail_host=(host)
|
26
|
+
@@mail_host = host
|
27
|
+
end
|
28
|
+
|
29
|
+
# The port to use when sending email. The default is 25.
|
30
|
+
def self.mail_port
|
31
|
+
@@mail_port
|
32
|
+
end
|
33
|
+
|
34
|
+
# Sets the mail port.
|
35
|
+
def self.mail_port=(port)
|
36
|
+
@@mail_port = 25
|
37
|
+
end
|
38
|
+
|
39
|
+
# A single email address or an array of email addresses to whom
|
40
|
+
# the email should be sent. Mandatory.
|
41
|
+
attr_accessor :to
|
42
|
+
|
43
|
+
# A single email address from whom the email is being delivered. The
|
44
|
+
# default is your login + '@' + your host name, though it is recommended
|
45
|
+
# that you specify it explicitly.
|
46
|
+
attr_accessor :from
|
47
|
+
|
48
|
+
# The subject of the email. Mandatory.
|
49
|
+
attr_accessor :subject
|
50
|
+
|
51
|
+
# The body of the email. Mandatory.
|
52
|
+
attr_accessor :body
|
53
|
+
|
54
|
+
# Creates a new EZ::Email object. As a general rule you won't use
|
55
|
+
# this method, but should use EZ::Email.deliver instead.
|
56
|
+
#
|
57
|
+
def initialize(options={})
|
58
|
+
raise TypeError unless options.is_a?(Hash)
|
59
|
+
validate_options(options)
|
60
|
+
@options = options
|
61
|
+
end
|
62
|
+
|
63
|
+
# Sends the email based on the options passed to the constructor.
|
64
|
+
# As a general rule you won't use this method directly, but should
|
65
|
+
# use EZ::Email.deliver instead.
|
66
|
+
#
|
67
|
+
def deliver
|
68
|
+
host = EZ::Email.mail_host
|
69
|
+
port = EZ::Email.mail_port
|
70
|
+
|
71
|
+
Net::SMTP.start(host, port, host){ |smtp|
|
72
|
+
smtp.open_message_stream(self.from, self.to){ |stream|
|
73
|
+
stream.puts "From: #{self.from}"
|
74
|
+
stream.puts "To: " + self.to.to_a.join(', ')
|
75
|
+
stream.puts "Subject: #{self.subject}"
|
76
|
+
stream.puts
|
77
|
+
stream.puts self.body
|
78
|
+
}
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
# Delivers a simple text email message using four options:
|
83
|
+
#
|
84
|
+
# * to
|
85
|
+
# * from
|
86
|
+
# * subject
|
87
|
+
# * body
|
88
|
+
#
|
89
|
+
# Examples:
|
90
|
+
#
|
91
|
+
# # Send an email to a single user
|
92
|
+
# EZ::Email.deliver(
|
93
|
+
# :to => 'some_user@hotmail.com',
|
94
|
+
# :from => 'me@hotmail.com',
|
95
|
+
# :subject => 'Hi',
|
96
|
+
# :body => 'How are you?'
|
97
|
+
# )
|
98
|
+
#
|
99
|
+
# # Send an email to a multiple users
|
100
|
+
# EZ::Email.deliver(
|
101
|
+
# :to => ['jon@hotmail.com', 'mary@hotmail.com'],
|
102
|
+
# :from => 'me@hotmail.com',
|
103
|
+
# :subject => 'Hi',
|
104
|
+
# :body => 'How are you?'
|
105
|
+
# )
|
106
|
+
#
|
107
|
+
# This is a shortcut for EZ::Email.new + EZ::Email.deliver.
|
108
|
+
#
|
109
|
+
def self.deliver(options)
|
110
|
+
new(options).deliver
|
111
|
+
end
|
112
|
+
|
113
|
+
private
|
114
|
+
|
115
|
+
# Private method that both validates the hash options, and sets
|
116
|
+
# the attribute values.
|
117
|
+
#
|
118
|
+
def validate_options(hash)
|
119
|
+
valid = %w/to from subject body/
|
120
|
+
hash.each{ |key, value|
|
121
|
+
key = key.to_s.downcase
|
122
|
+
raise ArgumentError unless valid.include?(key)
|
123
|
+
send("#{key}=", value)
|
124
|
+
}
|
125
|
+
|
126
|
+
if to.nil? || subject.nil? || body.nil?
|
127
|
+
raise ArgumentError, "Missing :to, :subject or :body"
|
128
|
+
end
|
129
|
+
|
130
|
+
if from.nil?
|
131
|
+
from = Etc.getlogin + '@' + Socket.gethostname
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
########################################################################
|
2
|
+
# test_ez_email.rb
|
3
|
+
#
|
4
|
+
# Test suite for the EZ::Email library.
|
5
|
+
########################################################################
|
6
|
+
require 'test/unit'
|
7
|
+
require 'ez/email'
|
8
|
+
|
9
|
+
class TC_EZ_Email < Test::Unit::TestCase
|
10
|
+
def setup
|
11
|
+
@to = 'foo@some_mail_service.com'
|
12
|
+
@from = 'bar@some_mail_service.com'
|
13
|
+
@subj = 'This is a test'
|
14
|
+
@body = 'How are you?'
|
15
|
+
|
16
|
+
@opts = {:to => @to, :from => @from, :subject => @subj, :body => @body }
|
17
|
+
@email = EZ::Email.new(@opts)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_version
|
21
|
+
assert_equal('0.1.0', EZ::Email::VERSION)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_to
|
25
|
+
assert_respond_to(@email, :to)
|
26
|
+
assert_respond_to(@email, :to=)
|
27
|
+
assert_equal(@to, @email.to)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_from
|
31
|
+
assert_respond_to(@email, :from)
|
32
|
+
assert_respond_to(@email, :from=)
|
33
|
+
assert_equal(@from, @email.from)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_subject
|
37
|
+
assert_respond_to(@email, :subject)
|
38
|
+
assert_respond_to(@email, :subject=)
|
39
|
+
assert_equal(@subj, @email.subject)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_body
|
43
|
+
assert_respond_to(@email, :body)
|
44
|
+
assert_respond_to(@email, :body=)
|
45
|
+
assert_equal(@body, @email.body)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_mail_host
|
49
|
+
assert_respond_to(EZ::Email, :mail_host)
|
50
|
+
assert_respond_to(EZ::Email, :mail_host=)
|
51
|
+
assert_kind_of(String, EZ::Email.mail_host)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_mail_port
|
55
|
+
assert_respond_to(EZ::Email, :mail_port)
|
56
|
+
assert_respond_to(EZ::Email, :mail_port=)
|
57
|
+
assert_equal(25, EZ::Email.mail_port)
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_deliver
|
61
|
+
assert_respond_to(EZ::Email, :deliver)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_invalid_option_raises_error
|
65
|
+
assert_raise(ArgumentError){ EZ::Email.send(:new, {:bogus => 77}) }
|
66
|
+
end
|
67
|
+
|
68
|
+
def teardown
|
69
|
+
@to = nil
|
70
|
+
@from = nil
|
71
|
+
@subj = nil
|
72
|
+
@body = nil
|
73
|
+
@opts = nil
|
74
|
+
@email = nil
|
75
|
+
end
|
76
|
+
end
|
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ez-email
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daniel Berger
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-01-23 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: A very simple interface for sending email
|
17
|
+
email: djberg96@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
- CHANGES
|
25
|
+
- MANIFEST
|
26
|
+
files:
|
27
|
+
- lib/ez
|
28
|
+
- lib/ez/email.rb
|
29
|
+
- test/test_ez_email.rb
|
30
|
+
- README
|
31
|
+
- CHANGES
|
32
|
+
- MANIFEST
|
33
|
+
has_rdoc: true
|
34
|
+
homepage: http://www.rubyforge.org/projects/shards
|
35
|
+
licenses: []
|
36
|
+
|
37
|
+
post_install_message:
|
38
|
+
rdoc_options: []
|
39
|
+
|
40
|
+
require_paths:
|
41
|
+
- lib
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: "0"
|
47
|
+
version:
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: "0"
|
53
|
+
version:
|
54
|
+
requirements: []
|
55
|
+
|
56
|
+
rubyforge_project: shards
|
57
|
+
rubygems_version: 1.3.1
|
58
|
+
signing_key:
|
59
|
+
specification_version: 3
|
60
|
+
summary: Really easy emails
|
61
|
+
test_files:
|
62
|
+
- test/test_ez_email.rb
|