class Autobuild::MailReporter
Attributes
Public Class Methods
Source
# File lib/autobuild/mail_reporter.rb, line 27 def initialize(config) super() @from_email = (config[:from] || default_mail) @to_email = (config[:to] || default_mail) @subject = config[:subject] || "Build %result% on #{Socket.gethostname} at %time%" @only_errors = config[:only_errors] @smtp_hostname = (config[:smtp] || "localhost") @smtp_port = Integer(config[:port] || Socket.getservbyname('smtp')) end
Calls superclass method
Public Instance Methods
Source
# File lib/autobuild/mail_reporter.rb, line 13 def default_mail Etc.endpwent uname = while (pwent = Etc.getpwent) break pwent.name if pwent.uid == Process.uid end raise "FATAL: cannot find a user with uid=#{Process.uid}" unless uname "#{pwent.name}@#{Socket.gethostname}" end
Source
# File lib/autobuild/mail_reporter.rb, line 40 def error(error) send_mail("failed", error.to_s) if error.mail? end
Source
# File lib/autobuild/mail_reporter.rb, line 50 def send_mail(result, body = "") mail = RMail::Message.new mail.header.date = Time.now mail.header.from = from_email mail.header.subject = subject. gsub('%result%', result). gsub('%time%', Time.now.to_s). gsub('%hostname%', Socket.gethostname) part = RMail::Message.new part.header.set('Content-Type', 'text/plain') part.body = body mail.add_part(part) # Attach log files Reporting.each_log do |file| name = file[Autobuild.logdir.size..-1] mail.add_file(name, file) end # Send the mails if smtp_hostname =~ %r{/} && File.directory?(File.dirname(smtp_hostname)) File.open(smtp_hostname, 'w') do |io| io.puts "From: #{from_email}" io.puts "To: #{to_email.join(' ')}" io.write RMail::Serialize.write('', mail) end puts "saved notification email in #{smtp_hostname}" else smtp = Net::SMTP.new(smtp_hostname, smtp_port) smtp.start do to_email.each do |email| mail.header.to = email smtp.send_mail(RMail::Serialize.write('', mail), from_email, email) end end # Notify the sending puts "sent notification mail to #{to_email} with source #{from_email}" end end
Source
# File lib/autobuild/mail_reporter.rb, line 44 def success unless only_errors send_mail("success", Autobuild.post_success_message || "") end end