#! /usr/bin/env ruby # 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. require 'erb' def transform( toData ) companyname, jobtitle, firstname, lastname, phonenumber, emailaddress = toData.split( ',' ) message = ERB.new( EmailTemplate ) [ emailaddress , message.result( binding ) ] end def process( toData ) toAddress , emailBody = transform( toData ) system( 'mail -s "' + EmailSubjectLine + '" ' + toAddress + " << XXXX\n" + emailBody ) end FromAddress = 'russel@russel.org.uk' if ARGV.length != 3 puts( 'Usage: mailshot.py ' ) exit( 1 ) end EmailSubjectLine = ARGV[0] EmailTemplate = File.open( ARGV[1] ) { | file | file.read( ) } File.open( ARGV[2] ) { | file | file.each { | line | process( line.strip( ) ) } }