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