[foundation-web] Add Python (test) version of mail-instructions.pl
- From: Olav Vitters <ovitters src gnome org>
- To: svn-commits-list gnome org
- Subject: [foundation-web] Add Python (test) version of mail-instructions.pl
- Date: Mon, 8 Jun 2009 10:25:27 -0400 (EDT)
commit 14e1a9a3fcfd4b57d07639049c91891fdb18d6e0
Author: Olav Vitters <olav bkor dhs org>
Date: Mon Jun 8 16:21:50 2009 +0200
Add Python (test) version of mail-instructions.pl
---
bin/mail-instructions.py | 100 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 100 insertions(+), 0 deletions(-)
diff --git a/bin/mail-instructions.py b/bin/mail-instructions.py
new file mode 100644
index 0000000..92b7b6b
--- /dev/null
+++ b/bin/mail-instructions.py
@@ -0,0 +1,100 @@
+#!/usr/bin/python
+
+# Script to send instructions to all voters.
+#
+# How to use this script
+# ======================
+#
+# You probably want to first update the subject of the e-mail that will be
+# sent. The second line of the instructions.txt will be the subject.
+#
+# So let's suppose that the instructions are in instructions.txt and that you
+# made a list of voters in maildata.txt (probably using create-tmp-tokens.pl).
+# The format of this file should be:
+# name;email;token
+#
+# You should use this script like this:
+# $ ./mail-instructions.pl maildata.txt instructions.txt
+#
+# This script needs a MTA to send the e-mails. If you don't have one or if
+# you're not sure that your ISP allows you to directly send mails, it's
+# probably better and safer to run the script from a gnome.org server.
+# Please test this script with your own email address by creating a
+# maildata.txt with a single entry like
+# foo;your address;bar
+#
+# You may want to look at your mail server logs (and maybe keep them) to
+# know if the mail was delivered. There are usually 10-15 errors. In case of
+# such errors, you can try to look for the new e-mail addresses of the voters
+# to ask them if they want to update their registered e-mail address and
+# receive the instructions.
+
+import smtplib
+import sys
+from email.mime.text import MIMEText
+
+re_template_fixes = [
+ (re.compile(r'^(\s*Dear )<member>'), '\1 $member'),
+ (re.compile(r'^(\s*E-mail:)'), '\1 $email'),
+ (re.compile(r'^(\s*Vote token:)'), '\1 $token')
+]
+
+sub email_it(recipients_file, instructions_file):
+ instructions = file(instructions_file, "r").read().splitlines()
+
+ from_header = instructions.pop(0)
+ subject_header = instructions.pop(0)
+
+ template = string.Template("\n".join(instructions))
+ for re_fix in re_template_fixes:
+ template = re_fix[0].sub(re_fix[1], template)
+
+ f = file(recipients_file, "r")
+
+ sent = 0
+ errors = 0
+ s = None
+
+ for line in f:
+ l = line.strip()
+ if l.beginswith("#") or l = "":
+ continue
+
+ l = l.split(";", 2)
+ if len(l) <> 2:
+ print "ERROR in recipients file, invalid line:"
+ print line,
+ continue
+
+ member_name, member_email, token = l
+
+ msg = MIMEText(template.substitute(member=member_name, email=member_email, token=token))
+ msg['To'] = member_email
+ msg['From'] = from_header
+ msg['Subject'] = subject_header
+
+ if s is None:
+ s = smtplib.SMTP()
+
+ try:
+ s.sendmail(from_header, ['olav bkor dhs org'], msg.as_string())
+ except smtplib.SMTPException:
+ print "Error: Could not send to %s (%s)!" % (member_email, member_name)
+ errors += 1
+ else:
+ sent += 1
+
+ if s:
+ s.quit()
+
+ f.close()
+
+ print "Mailed %s instructions; %s could not be mailed." % (sent, errors)
+
+
+if __name__ == '__main__':
+ if len(sys.argv) != 2:
+ print "Usage: mail-instructions.py <recipient list> <instructions template>"
+ sys.exit(1)
+
+ email_it(sys.argv[1], sys.argv[2])
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]