[foundation-web] Adding the script to mail the tokens to the electorate
- From: Tobias Mueller <tobiasmue src gnome org>
- To: svn-commits-list gnome org
- Subject: [foundation-web] Adding the script to mail the tokens to the electorate
- Date: Sun, 7 Jun 2009 19:03:09 -0400 (EDT)
commit 65a94e8f901a58374323227cde96acf09a1af71c
Author: Tobias Mueller <tobiasmue gnome org>
Date: Mon Jun 8 00:04:36 2009 +0200
Adding the script to mail the tokens to the electorate
---
bin/mail-instructions.pl | 91 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 91 insertions(+), 0 deletions(-)
diff --git a/bin/mail-instructions.pl b/bin/mail-instructions.pl
new file mode 100644
index 0000000..98de0ee
--- /dev/null
+++ b/bin/mail-instructions.pl
@@ -0,0 +1,91 @@
+#!/usr/bin/perl
+use utf8;
+
+# 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.
+
+use Mail::Internet;
+
+die "Usage: mail-instructions.pl <recipient list> <instructions template>\n" unless $#ARGV == 1;
+
+open INSTRUCTIONS, "<$ARGV[1]" || die "Cannot open instructions file $ARGV: $!";
+my @instructions = <INSTRUCTIONS>;
+close INSTRUCTIONS;
+my $from_header = shift @instructions;
+my $subject_header = shift @instructions;
+my $head = Mail::Header->new ( [ $from_header, "Subject" => $subject_header ]);
+$head->add("Subject", $subject_header);
+for (my $i = 0; $i <= $#instructions; $i++) {
+ push @dear_indexes, $i if $instructions[$i] =~ /^\s*Dear <member>/;
+ push @addr_indexes, $i if $instructions[$i] =~ /^\s*E-mail:/;
+ push @token_indexes, $i if $instructions[$i] =~ /^\s*Vote token:/;
+}
+
+open RECIPS, "<$ARGV[0]" || die "Cannot open file $ARGV: $!";
+
+my $sent = 0;
+my $errors = 0;
+
+while (<RECIPS>) {
+ chomp;
+ next if (/^\#/ || /^$/);
+
+ if (!(/^ *(.*);( * *);(.*) *$/)) {
+ print "Error for line: $_\n";
+ next;
+ }
+ my $identity = $1;
+ my $addr = $2;
+ my $token = $3;
+
+ foreach $index (@dear_indexes) {
+ $instructions[$index] = "Dear $identity,\n";
+ }
+
+ foreach $index (@addr_indexes) {
+ $instructions[$index] = "E-mail: $addr\n";
+ }
+
+ foreach $index (@token_indexes) {
+ $instructions[$index] = "Vote token: $token\n";
+ }
+
+ $head->replace ("To", $addr);
+ my $mail = Mail::Internet->new (Header => $head, Body => \ instructions);
+ unless ($mail->smtpsend ()) {
+ print "Error: Could not send to $addr ($identity)!\n";
+ $errors++;
+ } else {
+ $sent++;
+ }
+}
+
+close RECIPS;
+
+print "Mailed $sent instructions; $errors could not be mailed.\n";
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]