#! /usr/bin/env python
# -*- mode:python encoding:UTF-8 -*-

"""A program that takes as input two files, a mail template, and a csv file with a list of people to
send a mail to.  The csv file is formatted:

    companyname,jobtitle,firstname,lastname,phonenumber,emailaddress

and the mail template can use markers such as <%= firstname %> which will get edited with information from
the current person being mailshotted.  Basically this is a standard mail merge type thing but it actually
send email rather than creates postal letters."""

__author__ = "Russel Winder"
__version__ = "0.1.1"
__date__ = "2007-02-08"
__copyright__ = "Copyright © 2004-7 Russel Winder.  All rights reserved."

import os
import sys
import smtplib

def transform ( toData ) :
    ( companyName, jobTitle, firstName, lastName, phoneNumber, emailAddress ) = toData.split ( ',' )
    message = emailTemplate.replace ( '<%= companyname %>' , companyName ) \
               .replace ( '<%= jobtitle %>' , jobTitle ) \
               .replace ( '<%= firstname %>' , firstName ) \
               .replace ( '<%= lastname %>' , lastName ) \
               .replace ( '<%= phonenumber %>' , phoneNumber ) \
               .replace ( '<%= emailaddress %>' , emailAddress )
    return ( emailAddress , message )

def process ( toData ) :
    fromAddress = 'russel@russel.org.uk'
    ( toAddress, emailBody ) = transform ( toData )
    emailBody = """From: %s
To: %s
Subject: %s

""" % ( fromAddress , toAddress , emailSubjectLine ) + emailBody
    server = smtplib.SMTP ( 'mail.russel.org.uk' )
    server.sendmail ( fromAddress , toAddress , emailBody )
    server.quit ( )

if __name__ == '__main__' :
    if len ( sys.argv ) != 4 :
        print 'Usage: mailshot.py <mail-subject-line> <mail-template> <targets-csv-file>'
        sys.exit ( 1 )
    emailSubjectLine = sys.argv[1]
    emailTemplate = file ( sys.argv[2] ).read ( )
    for line in file ( sys.argv[3] ) : process ( line.strip ( ) )
