kelredd-useful 0.1.16 → 0.1.17
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.
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
require 'net/smtp'
|
3
|
+
require 'tmail'
|
4
|
+
require 'sinatra/base'
|
5
|
+
require File.join([File.dirname(__FILE__), 'exceptions'])
|
6
|
+
require File.join([File.dirname(__FILE__), 'tls'])
|
7
|
+
|
8
|
+
module Useful
|
9
|
+
module SinatraHelpers
|
10
|
+
module Mailer
|
11
|
+
|
12
|
+
class Base
|
13
|
+
|
14
|
+
CONFIGS = [:server, :domain, :port, :reply_to, :username, :password, :authentication, :content_type, :charset]
|
15
|
+
CONFIGS.each do |config|
|
16
|
+
attr_reader config
|
17
|
+
end
|
18
|
+
attr_accessor :logger
|
19
|
+
|
20
|
+
def initialize(configs={})
|
21
|
+
CONFIGS.each do |config|
|
22
|
+
instance_variable_set("@#{config}", configs[config])
|
23
|
+
end
|
24
|
+
@authentication ||= :login
|
25
|
+
@reply_to ||= @username
|
26
|
+
@content_type ||= 'text/plain'
|
27
|
+
@charset ||= 'UTF-8'
|
28
|
+
@logger = block_given? ? yield : nil
|
29
|
+
end
|
30
|
+
|
31
|
+
def send(settings={})
|
32
|
+
check_configs
|
33
|
+
[:to, :subject].each do |setting|
|
34
|
+
raise Useful::SinatraHelpers::Mailer::SendError, "cannot send, #{setting} not specified." unless settings[setting]
|
35
|
+
end
|
36
|
+
mail = generate_mail(settings)
|
37
|
+
mail.body = yield(mail) if block_given?
|
38
|
+
mail.body ||= ''
|
39
|
+
Sinatra::Application.environment.to_s == 'production' ? send_mail(mail) : log_mail(mail)
|
40
|
+
log(:info, "Sent '#{mail.subject}' to #{mail.to.join(',')}")
|
41
|
+
mail
|
42
|
+
end
|
43
|
+
|
44
|
+
protected
|
45
|
+
|
46
|
+
def check_configs
|
47
|
+
CONFIGS.each do |config|
|
48
|
+
raise Useful::SinatraHelpers::Mailer::ConfigError, "#{config} not configured." unless instance_variable_get("@#{config}")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def generate_mail(settings)
|
53
|
+
mail = TMail::Mail.new
|
54
|
+
mail.to = Array.new([settings[:to]])
|
55
|
+
mail.from = @reply_to
|
56
|
+
mail.reply_to = @reply_to
|
57
|
+
mail.subject = settings[:subject]
|
58
|
+
mail.date = Time.now
|
59
|
+
mail.set_content_type @content_type
|
60
|
+
mail.charset = @charset
|
61
|
+
mail
|
62
|
+
end
|
63
|
+
|
64
|
+
def send_mail(mail)
|
65
|
+
raise Useful::SinatraHelpers::Mailer::SendError, "cannot send, bad (or empty) mail object given." unless mail
|
66
|
+
Net::SMTP.start(@server, @port, @domain, @username, @password, @authentication) do |server|
|
67
|
+
mail.to.each {|recipient| server.send_message(mail.to_s, mail.from, recipient) }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def log_mail(mail)
|
72
|
+
log(:debug, mail.to_s)
|
73
|
+
end
|
74
|
+
|
75
|
+
def log(level, msg)
|
76
|
+
if(msg)
|
77
|
+
if @logger && @logger.respond_to(level)
|
78
|
+
@logger.send(level.to_s, msg)
|
79
|
+
else
|
80
|
+
puts "** [#{level.to_s.upcase}]: [Mailer] #{msg}"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# Note: This is a complete rip of http://github.com/ambethia/smtp-tls/tree/master
|
2
|
+
# => I chose to copy the source in here instead of add yet another gem depencency
|
3
|
+
# => I take no credit for this work, check out link for more info.
|
4
|
+
|
5
|
+
Net::SMTP.class_eval do
|
6
|
+
private
|
7
|
+
def do_start(helodomain, user, secret, authtype)
|
8
|
+
raise IOError, 'SMTP session already started' if @started
|
9
|
+
|
10
|
+
if RUBY_VERSION > "1.8.6"
|
11
|
+
check_auth_args user, secret if user or secret
|
12
|
+
else
|
13
|
+
check_auth_args user, secret, authtype if user or secret
|
14
|
+
end
|
15
|
+
|
16
|
+
sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
|
17
|
+
@socket = Net::InternetMessageIO.new(sock)
|
18
|
+
@socket.read_timeout = 60 #@read_timeout
|
19
|
+
|
20
|
+
check_response(critical { recv_response() })
|
21
|
+
do_helo(helodomain)
|
22
|
+
|
23
|
+
if starttls
|
24
|
+
raise 'openssl library not installed' unless defined?(OpenSSL)
|
25
|
+
ssl = OpenSSL::SSL::SSLSocket.new(sock)
|
26
|
+
ssl.sync_close = true
|
27
|
+
ssl.connect
|
28
|
+
@socket = Net::InternetMessageIO.new(ssl)
|
29
|
+
@socket.read_timeout = 60 #@read_timeout
|
30
|
+
do_helo(helodomain)
|
31
|
+
end
|
32
|
+
|
33
|
+
authenticate user, secret, authtype if user
|
34
|
+
@started = true
|
35
|
+
ensure
|
36
|
+
unless @started
|
37
|
+
# authentication failed, cancel connection.
|
38
|
+
@socket.close if not @started and @socket and not @socket.closed?
|
39
|
+
@socket = nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def do_helo(helodomain)
|
44
|
+
begin
|
45
|
+
if @esmtp
|
46
|
+
ehlo helodomain
|
47
|
+
else
|
48
|
+
helo helodomain
|
49
|
+
end
|
50
|
+
rescue Net::ProtocolError
|
51
|
+
if @esmtp
|
52
|
+
@esmtp = false
|
53
|
+
@error_occured = false
|
54
|
+
retry
|
55
|
+
end
|
56
|
+
raise
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def starttls
|
61
|
+
getok('STARTTLS') rescue return false
|
62
|
+
return true
|
63
|
+
end
|
64
|
+
|
65
|
+
def quit
|
66
|
+
begin
|
67
|
+
getok('QUIT')
|
68
|
+
rescue EOFError
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/lib/useful/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kelredd-useful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kelredd
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-07-12 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -67,6 +67,11 @@ files:
|
|
67
67
|
- lib/useful/sinatra_helpers/erb/partials.rb
|
68
68
|
- lib/useful/sinatra_helpers/erb/tags.rb
|
69
69
|
- lib/useful/sinatra_helpers/erb.rb
|
70
|
+
- lib/useful/sinatra_helpers/mailer
|
71
|
+
- lib/useful/sinatra_helpers/mailer/base.rb
|
72
|
+
- lib/useful/sinatra_helpers/mailer/exceptions.rb
|
73
|
+
- lib/useful/sinatra_helpers/mailer/tls.rb
|
74
|
+
- lib/useful/sinatra_helpers/mailer.rb
|
70
75
|
- lib/useful/sinatra_helpers.rb
|
71
76
|
- lib/useful/version.rb
|
72
77
|
- lib/useful.rb
|