contact += '@mit.edu'
msg = MIMEText(message % vm)
msg['To'] = contact
- msg['CC'] = 'XVM <xvm@mit.edu>'
+ msg['From'] = opts.from_addr
msg['Reply-To'] = 'XVM <xvm@mit.edu>'
+ msg['Subject'] = opts.subject % vm
+ smtp.sendmail(opts.from_addr,
+ [contact],
+ msg.as_string())
+ return msg.as_string()
+
+def send_summary(smtp, opts, messages):
+ msg = MIMEText('\n\n\n'.join(messages))
+ msg['To'] = 'xvm@mit.edu'
msg['From'] = opts.from_addr
- msg['Subject'] = '[xvm] Unexpected reboot of your VM %s' % vm
+ msg['Subject'] = ("xvm outage-mail summary (%d): %s"
+ % (len(messages), opts.subject))
smtp.sendmail(opts.from_addr,
- [contact, 'xvm@mit.edu'],
+ ['xvm@mit.edu'],
msg.as_string())
def main(argv):
type = 'string',
dest = 'message',
help = 'filename with body of message')
+ parser.add_option('-s', '--subject',
+ type = 'string',
+ dest = 'subject',
+ default = '[xvm] Unexpected reboot of your VM %s',
+ help = 'subject line of message; %s for VM name')
parser.add_option('-f', '--from',
type = 'string',
dest = 'from_addr',
s = smtplib.SMTP()
s.connect()
+ messages = []
for vm in vms:
- send_mail(s, opts, message, vm)
+ messages.append(send_mail(s, opts, message, vm))
+ send_summary(s, opts, messages)
s.close()