Module: Pony

Defined in:
lib/pony.rb

Class Method Summary collapse

Class Method Details

.build_tmail(options) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/pony.rb', line 25

def self.build_tmail(options)
	mail = TMail::Mail.new
	mail.to = options[:to]
	mail.from = options[:from] || 'pony@unknown'
	mail.subject = options[:subject]
	mail.body = options[:body] || ""
	if options[:html_body] == true
     mail.set_content_type('text','html')
   end
	mail
end

.mail(options) ⇒ Object

Raises:

  • (ArgumentError)


10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/pony.rb', line 10

def self.mail(options)
	raise(ArgumentError, ":to is required") unless options[:to]

	via = options.delete(:via)
	if via.nil?
		transport build_tmail(options)
	else
		if via_options.include?(via.to_s)
			send("transport_via_#{via}", build_tmail(options), options)
		else
			raise(ArgumentError, ":via must be either smtp or sendmail")
		end
	end
end

.sendmail_binaryObject



37
38
39
# File 'lib/pony.rb', line 37

def self.sendmail_binary
	@sendmail_binary ||= `which sendmail`.chomp
end

.transport(tmail) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/pony.rb', line 41

def self.transport(tmail)
	if File.executable? sendmail_binary
		transport_via_sendmail(tmail)
	else
		transport_via_smtp(tmail)
	end
end

.transport_via_sendmail(tmail, options = {}) ⇒ Object



53
54
55
56
57
58
59
60
61
# File 'lib/pony.rb', line 53

def self.transport_via_sendmail(tmail, options={})
	IO.popen('-', 'w+') do |pipe|
		if pipe
			pipe.write(tmail.to_s)
		else
			exec(sendmail_binary, *tmail.to)
		end
	end
end

.transport_via_smtp(tmail, options = {:smtp => {}}) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/pony.rb', line 63

def self.transport_via_smtp(tmail, options={:smtp => {}})
	default_options = {:smtp => { :host => 'localhost', :port => '25', :domain => 'localhost.localdomain' }}
	o = default_options[:smtp].merge(options[:smtp])
	smtp = Net::SMTP.new(o[:host], o[:port])
	if o.include?(:auth)
		smtp.start(o[:domain], o[:user], o[:password], o[:auth])
	else
		smtp.start(o[:domain])
	end
	smtp.send_message tmail.to_s, tmail.from, tmail.to
	smtp.finish
end

.via_optionsObject



49
50
51
# File 'lib/pony.rb', line 49

def self.via_options
	%w(sendmail smtp)
end