FeD:Projekte/Massmailer
Aus Förderverein euregionale Digitalkultur e.V.
Ist momentan mit Templates für die Fahnenbestellung ausgestattet.
Inhaltsverzeichnis |
Anleitung
Template anpassen, CSV-File mit enstprechenden Feldern ausstatten und mit Daten füllen, Massmailer drüber jagen - et voila!
Sourcecode
Erstmal das Programm selbst:
#!/usr/bin/python # vim:fileencoding=utf-8 # WARNING! # Do not let this program parse unverified user input! # The code will not be safe and may harm you and your machine. name="Massmailer" version="0.0.1" date="2009/10/25 20:45" license="""\n # Massmailer (C)left 2009, riot@fedev.eu # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Placce, Suite 330, Boston, MA 02111-1307 USA # # And don't you point any lawyers at me! # Send me a postcard, if you like this software. #\n """ description="""\n Massmailer A template-capable massmailer using a cvs-parser.\n """ author="riot@fedev.eu" usage=""" -h, --help show this readme -v, --verbose run verbosely """ todo=""" - Cleanup - Add getopt-support - Configfile - More dynamic templating - Better data integration - Docs - reimplement / check file attachments """ from Cheetah.Template import Template from csv import DictReader from email.Message import Message from email.Parser import Parser from sys import stderr from smtplib import SMTP import getpass #def sendMail(to, subject, text, files=[],server="localhost"): # assert type(to)==list # assert type(files)==list # fro = "SENDER" # # msg = MIMEMultipart() # msg['From'] = fro # msg['To'] = COMMASPACE.join(to) # msg['Date'] = formatdate(localtime=True) # msg['Subject'] = subject # # msg.attach( MIMEText(text) ) # # for file in files: # part = MIMEBase('application', "octet-stream") # part.set_payload( open(file,"rb").read() ) # Encoders.encode_base64(part) # part.add_header('Content-Disposition', 'attachment; filename="%s"' # % os.path.basename(file)) # msg.attach(part) # # smtp = smtplib.SMTP(server) # smtp.sendmail(fro, to, msg.as_string() ) # smtp.close() templateFile='template.tmpl' dataFile='list.csv' tclass=Template.compile(file=templateFile) r=DictReader(open(dataFile),delimiter=';') p=Parser() defaultserver = "mail.fedev.eu" server = raw_input("Enter mailserver or leave default (%s): " % defaultserver) if server == "": server = defaultserver username = raw_input("Enter username for %s: " % server) password = getpass.getpass("Enter password for %s@%s: " %(username, server)) Sender = raw_input("Enter From: Address for mails: ") print "Connecting to %s@%s with TLS enabled..." % (username, server) s = SMTP() s.connect(server) print "Connected :)" s.ehlo() print "EHLO :)" s.starttls() print "TLS" s.ehlo() print "TLS :)" s.noop() s.login(username, password) s.noop() print "Logged in :)" for line in r: stderr.write(line) if line['Email']=='': stderr.write("%s has n eMail-Address :( \n"%(line['Name'])) else: #print line['Vorname'],line['Name'],line['Email'] t=tclass(namespaces=[line]) m=p.parsestr(str(t)) m.set_charset('utf-8') m.add_header('X-Mailer','FeD-Python-Mailer 1.1') print m.as_string(unixfrom=True) #sendmail([line['Email']], s.sendmail(Sender, [line['Email']], m.as_string()) stderr.write("%s -> %s\n"%(line['Name'],line['Email'])) print "Closing connection to %s" % server s.close()
Template
Hier das erste template:
#encoding utf-8 #from email.Header import Header From: #echo str(Header(unicode('Riot','utf-8')).encode()+' <fahnen@fedev.eu>')# To: #echo str(Header(unicode($Name, 'utf-8')).encode() + ' <'+$Email+'>')# Subject: Fahnenbestellung Hallo $Name, laut unseren Unterlagen möchtest Du Pesthörnchenfahnen bestellen und zwar: Anzahl Schwarz/Weiss: $SW Anzahl Gelb/Schwarz: $GS Bemerkungen: $Bemerkungen Ist das so korrekt? Dann würden wir Dich bitten, dies noch einmal per Mail an: fahnen@fedev.eu mit dem Subject: FAHNENBESTELLUNG zu best- ätigen. Danke. Die Preise der Fahnen sind: S/W = $PreisSW EURO G/S = $PreisGS EURO Porto = $Porto EURO pro BAZ Artikel Sobald wir alle Rückmeldungen haben, geben wir die Kontodaten und zu überweisenden Vorkasse-Beträge bekannt Solltest Du wirklich nicht Vorkasse zahlen können/wollen/mögen, schreibe bitte einen alternativ- Vorschlag in Deiner email. Vergiss auch bitte nicht uns in der Antwort Deine gewünschte Liefer- adresse mitzuteilen. Viele Grüße, riot (CCCAC)
Liste.cvs
Ein Demo mit kaputter emailaddresse
Name;Email;SW;GS;Kontaktdaten;Bemerkungen;PreisSW;PreisGS;Porto Foobar;foobar@gmail.com;2;;mail und jabber;Ich bin ein TEST :D;35;60;5 barFoo;barfoo@fedev.eu;1;2;mail;Ich auch :);35;60;5