125: def send(reports)
126: pid = fork do
127: if Puppet[:smtpserver] != "none"
128: begin
129: Net::SMTP.start(Puppet[:smtpserver]) do |smtp|
130: reports.each do |emails, messages|
131: smtp.open_message_stream(Puppet[:reportfrom], *emails) do |p|
132: p.puts "From: #{Puppet[:reportfrom]}"
133: p.puts "Subject: Puppet Report for %s" % self.host
134: p.puts "To: " + emails.join(", ")
135: p.puts "Date: " + Time.now.rfc2822
136: p.puts
137: p.puts messages
138: end
139: end
140: end
141: rescue => detail
142: if Puppet[:debug]
143: puts detail.backtrace
144: end
145: raise Puppet::Error,
146: "Could not send report emails through smtp: %s" % detail
147: end
148: elsif Puppet[:sendmail] != ""
149: begin
150: reports.each do |emails, messages|
151:
152: IO.popen(Puppet[:sendmail] + " " + emails.join(" "), "w") do |p|
153: p.puts "From: #{Puppet[:reportfrom]}"
154: p.puts "Subject: Puppet Report for %s" % self.host
155: p.puts "To: " + emails.join(", ")
156:
157: p.puts messages
158: end
159: end
160: rescue => detail
161: if Puppet[:debug]
162: puts detail.backtrace
163: end
164: raise Puppet::Error,
165: "Could not send report emails via sendmail: %s" % detail
166: end
167: else
168: raise Puppet::Error, "SMTP server is unset and could not find sendmail"
169: end
170: end
171:
172:
173: Process.detach(pid)
174: end