# Send the email reports.
def send(reports)
pid = fork do
if Puppet[:smtpserver] != "none"
begin
Net::SMTP.start(Puppet[:smtpserver]) do |smtp|
reports.each do |emails, messages|
Puppet.info "Sending report to %s" % emails.join(", ")
smtp.open_message_stream(Puppet[:reportfrom], *emails) do |p|
p.puts "From: #{Puppet[:reportfrom]}"
p.puts "Subject: Puppet Report for %s" % self.host
p.puts "To: " + emails.join(", ")
p.puts "Date: " + Time.now.rfc2822
p.puts
## This is the bit I want to change.
## I want to pretty up the p.puts messages, make it have newlines, maybe HTML w/ colour??
p.puts messages
end
end
end
rescue => detail
if Puppet[:debug]
puts detail.backtrace
end
raise Puppet::Error,
"Could not send report emails through smtp: %s" % detail
end
elsif Puppet[:sendmail] != ""
begin
reports.each do |emails, messages|
Puppet.info "Sending report to %s" % emails.join(", ")
# We need to open a separate process for every set of email addresses
IO.popen(Puppet[:sendmail] + " " + emails.join(" "), "w") do |p|
p.puts "From: #{Puppet[:reportfrom]}"
p.puts "Subject: Puppet Report for %s" % self.host
p.puts "To: " + emails.join(", ")
p.puts messages
end
end
rescue => detail
if Puppet[:debug]
puts detail.backtrace
end
raise Puppet::Error,
"Could not send report emails via sendmail: %s" % detail
end
else
raise Puppet::Error, "SMTP server is unset and could not find sendmail"
end
end
# Don't bother waiting for the pid to return.
Process.detach(pid)
end