of emails handled. Suitable for mailing campaigns.
class massMail
{
var $subject = array( );
var $body = array( );
var $to = array( );
var $attachment = array( );
var $boundary = '';
var $header = '';
var $sender = ''
function massMail( $name, $mail)
{
$this->boundary = md5( uniqid( time( )));
$this->sender = "From: {$name} <{$mail}>\r\n";
}
function setTo( $mail, $vars)
{
$this->to[$mail] = $vars;
}
function attachment( $file)
{
$this->attachment[] = $file;
}
function setSubject( $name, $subject)
{
$this->subject[$name] = $subject;
}
function setBody( $name, $str)
{
$this->body[$name] = $str;
} // function setBody($type, $name, $str)
function getBody( $vars)
{
if ( isset( $vars['class'])) $class = $vars['class'];
else $class = 0;
if ( isset( $this -> body[$class])) $body = $this -> body[$class];
elseif ( count( $this -> body) > 0) $body = $this -> body[0];
else $body = '';
foreach( $vars as $k => $v)
{
if ( $k != 'class') $body = str_replace( $k, $v, $body);
}
return $body;
} // function getBody($vars)
function getSubject( $class)
{
if ( empty( $class)) $class = 0;
return $this -> subject[$class];
} // function getSubject($class)
function addStyle( $html)
{
// add any styles that you need. Be aware that they may not
// be read by the email client the same as a browser
$output = "
{$html}
";
return $output;
} //function addStyle($html)
function getTextSection( $html)
{
// plain text version of message
$txt = strip_tags( $html);
$body = "--{$this->boundary}\r\n" .
"Content-Type: text/plain; charset=ISO-8859-1\r\n" .
"Content-Transfer-Encoding: base64\r\n\r\n";
$body .= chunk_split( base64_encode( $txt));
return $body;
} //getTextSection
function getAttachments( )
{
$tail = '';
$max = count( $this -> attachment);
if( $max > 0)
{
for( $i = 0;$i < $max;$i++)
{
$file = fread( fopen( $this -> attachment[$i], 'r'), filesize( $this -> attachment[$i]));
$tail .= "--{$this->boundary}\n";
$tail .= "Content-Type: application/x-zip-compressed; name=" . $this -> attachment[$i] . "\n";
$tail .= "Content-Transfer-Encoding: base64\n";
$tail .= "Content-Disposition: attachment; filename=" . $this -> attachment[$i] . "\n\n";
$tail .= chunk_split( base64_encode( $file)) . "\n";
$file = "";
}
}
$tail .= "--{$this->boundary}--\n\n";
return $tail;
} //function getAttachments()
function getHTMLSection( $html)
{
// HTML version of message
$body .= "--{$this->boundary}\r\n" .
"Content-Type: text/html; charset=ISO-8859-1\r\n" .
"Content-Transfer-Encoding: base64\r\n\r\n";
$body .= chunk_split( base64_encode( $html));
return $body;
} //function getHTMLSection($html)
function send( )
{
$top = $this->sender . "MIME-Version: 1.0\r\n";
// tell e-mail client this e-mail contains//alternate versions
$top .= "Content-Type: multipart/alternative" .
"; boundary = {$this->boundary}\r\n\r\n";
$top .= "This is a MIME encoded message.\r\n\r\n";
// Attachment is always last
$tail = $this->getAttachments( );
foreach( $this->to as $mail => $vars)
{
$html = $this -> getBody( $vars);
$body = $this->getTextSection( $html);
$html = $this -> addStyle( $html);
$body .= $this->getHTMLSection( $html);
$subject = $this -> getSubject( "{$vars['class']}");
mail( $mail, $subject, '', "{$top}{$body}\n{$tail}");
}
$this->to = array(); //can build up the to list and send another batch
} //function send()
} //class massMail
/**
* massMail Test Script
*
**/
//dummy script to get the body of each email type. Typically it would query the database
function getFUBody($type)
{
if ($type == 1) $output = 'hello world
My Id is {LISTID}
bye now';
elseif ($type == 2) $output = 'That was fun
My Id is {LISTID}
bye now';
elseif ($type == 3) $output = 'third time lucky
My Id is {LISTID}
bye now';
else $output = 'Last campaign message
My Id is {LISTID}
bye now';
$subject = "Email {$type}";
return array($subject, $output);
}
$mail = new massMail('Senders name','support@mysite.com');
//preload each email type for the campaign
for($i = 1; $i < 5; $i++)
{
list($subject, $body) = getFUBody($i);
$mail->setSubject("{$i}", $subject);
$mail->setBody("{$i}", $body);
}
//add each address you need to email and each of the variables embedded in the email body
//this example includes a database id for the unsubscribe process
//but could include any number of personalization variables.
$mail->setTo('sarah@mysite.com', array('class' => '2','{LISTID}' => '9049'));
$mail->setTo('joe@mysite.com', array('class' => '2','{LISTID}' => '851'));
//send
$mail->send();
$mail->setTo('webmaster@mysite.com', array('class' => '1','{LISTID}' => '9050'));
$mail->setTo('support@mysite.com', array('class' => '3','{LISTID}' => '9067'));
//send
$mail->send();
?>