FeD:Projekte/Massmailer

Aus Förderverein euregionale Digitalkultur e.V.

Wechseln zu: Navigation, Suche

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