+ if config.mail and not config.debug:
+ setSubjectViaRT(ticket_id, subject)
+ setAdminCCViaRT(ticket_id, to)
+
+ cmd = "rt correspond -m - %s" % ticket_id
+ (f_in, f_out, f_err) = os.popen3(cmd)
+ f_in.write(text)
+ f_in.flush()
+ f_in.close()
+ value = f_out.read()
+
+ # TODO: rt doesn't write to stderr on error!!!
+ if value == "":
+ raise Exception, f_err.read()
+
+ del f_in
+ f_out.close(); del f_out
+ f_err.close(); del f_err
+ os.wait()
+
+ return ticket_id
+
+
+def emailViaRT_NoTicket(subject, text, to):
+ """Use RT command line tools to send email.
+ return the generated RT ticket ID number.
+ """
+ i_ticket = 0
+
+ if config.mail and config.debug:
+ to = [config.email]
+
+ # Set ENV Variables/PATH
+ _setupRTenvironment()
+
+ # NOTE: AdminCc: (in PLC's RT configuration) gets an email sent.
+ # This is not the case (surprisingly) for Cc:
+ input_text = "Subject: %s\n"
+ input_text += "Requestor: monitor@planet-lab.org\n"
+ input_text += "id: ticket/new\n"
+ input_text += "Queue: Monitor\n"
+ for recipient in to:
+ input_text += "AdminCc: %s\n" % recipient
+ input_text += "Text: %s"
+
+ # Add a space for each new line to get RT to accept the file.
+ spaced_text = reformat_for_rt(text)
+
+ if config.mail and not config.debug:
+ cmd = "rt create -i -t ticket"
+ (f_in, f_out, f_err) = os.popen3(cmd)
+ f_in.write(input_text % (subject, spaced_text))
+ f_in.flush()
+ f_in.close()
+ value = f_out.read()
+
+ # TODO: rt doesn't write to stderr on error!!!
+ if value == "":
+ raise Exception, f_err.read()
+
+ print "MAILER: ticket value == %s" % value.split()[2]
+ i_ticket = int(value.split()[2])
+ # clean up the child process.
+ f_in.close(); del f_in
+ f_out.close(); del f_out
+ f_err.close(); del f_err
+ os.wait()
+ elif config.mail and config.debug:
+ email(subject, spaced_text, to)
+ i_ticket = 0
+ else:
+ i_ticket = 0
+
+ return i_ticket
+
+def email(subject, text, to):