Report abuse


			
# 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