b52668360b07a8b93341de7e1fd24b719c9a8c47
[patchq.git] / send-reports.py
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 # This script sends out the report emails.
5 #
6 # Important: When testing, edit ‘config.py’ and set ‘reply_override’
7 # to your own email address.  For production use, set it to ‘None’.
8
9 import email
10 from email.mime.text import MIMEText
11 import json
12 import pika
13 import smtplib
14
15 import config
16
17 connection = pika.BlockingConnection(pika.ConnectionParameters(
18     host = config.mq_server))
19 channel = connection.channel()
20
21 smtp = smtplib.SMTP(config.smtp_server)
22 emails = 0
23
24 def ack(method):
25     channel.basic_ack(delivery_tag = method.delivery_tag)
26
27 while True:
28     method, _, body = channel.basic_get(queue = 'patchq_reports',
29                                         no_ack = False)
30     if not method: break
31
32     to, subject, ref, content = json.loads(body)
33
34     if config.reply_override is not None:
35         to = [config.reply_override]
36
37     # Construct an email of type text/plain with the body of the
38     # message.
39     msg = MIMEText(content)
40     msg['Subject'] = subject
41     msg['From'] = email.utils.formataddr(config.from_address)
42     msg['To'] = ",".join([email.utils.formataddr(t) for t in to])
43     msg['In-Reply-To'] = ref
44     msg['References'] = ref
45
46     # Send the email.
47     smtp.sendmail(config.from_address[1],
48                   [email.utils.formataddr(t) for t in to],
49                   msg.as_string())
50     emails = emails+1
51
52     # We've sent the reply, so ack the message.
53     ack(method)
54
55 smtp.quit()
56
57 print ("Sent %d emails." % emails)