bin/mail-instructions: Replaced PERL version by a Python version
I finally came around to test the script on window. Although the Python script is a bit ugly, it works. Just some Python-2.4 compatibility was needed. In the future, we can assume to read the Template string directory out of the file, i.e. w/o creating $member, etc. Also, check whether a "$" in the token confuses the Template parser.
This commit is contained in:
		
							parent
							
								
									1800986e0f
								
							
						
					
					
						commit
						b746ee8015
					
				
					 2 changed files with 5 additions and 93 deletions
				
			
		|  | @ -1,91 +0,0 @@ | ||||||
| #!/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"; |  | ||||||
|  | @ -33,7 +33,10 @@ import smtplib | ||||||
| import sys | import sys | ||||||
| import string | import string | ||||||
| import re | import re | ||||||
|  | try: | ||||||
|     from email.mime.text import MIMEText |     from email.mime.text import MIMEText | ||||||
|  | except ImportError: | ||||||
|  |     from email.MIMEText import MIMEText | ||||||
| 
 | 
 | ||||||
| re_template_fixes = [ | re_template_fixes = [ | ||||||
|     (re.compile(r'^(\s*Dear )<member>', re.MULTILINE), '\\1$member'), |     (re.compile(r'^(\s*Dear )<member>', re.MULTILINE), '\\1$member'), | ||||||
|  | @ -81,7 +84,7 @@ def email_it(recipients_file, instructions_file): | ||||||
|             s.connect('localhost') |             s.connect('localhost') | ||||||
| 
 | 
 | ||||||
|         try: |         try: | ||||||
|             s.sendmail(from_header, ['olav@bkor.dhs.org'], msg.as_string()) |             s.sendmail(from_header, [member_email,], msg.as_string()) | ||||||
|         except smtplib.SMTPException: |         except smtplib.SMTPException: | ||||||
|             print "Error: Could not send to %s (%s)!" % (member_email, member_name) |             print "Error: Could not send to %s (%s)!" % (member_email, member_name) | ||||||
|             errors += 1 |             errors += 1 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Tobias Mueller
						Tobias Mueller