<?php 
/* 
 * test_smarty_personalized_mailing.php 
 * 
 * @(#) $Header: /opt2/ena/metal/mimemessage/test_smarty_personalized_mailing.php,v 1.5 2005/02/16 04:04:03 mlemos Exp $ 
 * 
 */ 
 
    require("email_message.php"); 
 
/* 
 * Include Smarty template engine class. Make sure the class file is in 
 * your include path. 
 * 
 */ 
    require('Smarty.class.php'); 
 
/* 
 * Assign the $from_name and $from_address to your real sender name and 
 * address or else the message may not be accepted. 
 * 
 */ 
    $from_name=getenv("USERNAME"); 
    $from_address=getenv("USER")."@".getenv("HOSTNAME"); 
    $reply_name=$from_name; 
    $reply_address=$from_address; 
    $reply_address=$from_address; 
    $error_delivery_name=$from_name; 
    $error_delivery_address=$from_address; 
 
    /* Define recipient personalization data. Change this before testing. */ 
    $to=array( 
        array( 
            "address"=>"[email protected]", 
            "name"=>"Peter Gabriel", 
            "balance"=>1234 
        ), 
        array( 
            "address"=>"[email protected]", 
            "name"=>"Paul Simon", 
            "balance"=>567890 
        ), 
        array( 
            "address"=>"[email protected]", 
            "name"=>"Mary Chain", 
            "balance"=>-1234 
        ) 
    ); 
 
    $subject="Testing Manuel Lemos' MIME Email composition PHP class for sending personalized bulk mail using HTML and text template with the Smarty engine"; 
 
    $email_message=new email_message_class; 
 
    /* 
     *  For faster queueing use qmail... 
     * 
     *  require_once("qmail_message.php"); 
     *  $email_message=new qmail_message_class; 
     * 
     *  or sendmail in queue only delivery mode 
     * 
     *  require_once("sendmail_message.php"); 
     *  $email_message=new sendmail_message_class; 
     *  $email_message->delivery_mode=SENDMAIL_DELIVERY_QUEUE; 
     * 
     *  Always call the SetBulkMail function to hint the class to optimize 
     *  its behaviour to make deliveries to many users more efficient. 
     */ 
 
    $email_message->SetBulkMail(1); 
 
    $email_message->SetEncodedEmailHeader("From",$from_address,$from_name); 
    $email_message->SetEncodedEmailHeader("Reply-To",$reply_address,$reply_name); 
    /* 
     *  Set the Return-Path header to define the envelope sender address to which bounced messages are delivered. 
     *  If you are using Windows, you need to use the smtp_message_class to set the return-path address. 
     */ 
    if(defined("PHP_OS") 
    && strcmp(substr(PHP_OS,0,3),"WIN")) 
        $email_message->SetHeader("Return-Path",$error_delivery_address); 
    $email_message->SetEncodedHeader("Subject",$subject); 
 
    /* 
     *  If you are not going to personalize the message body for each recipient, 
     *  set the cache_body flag to 1 to reduce the time that the class will take 
     *  to regenerate the message to send to each recipient 
     */ 
    $email_message->cache_body=0; 
 
    /* 
     *  Lets use two distinct Smarty objects for composing the HTML and text 
     *  parts and avoid the need to re-assign constant values when switching 
     *  contexts. 
     */ 
    $html_smarty=new Smarty; 
    $text_smarty=new Smarty; 
    if(!$html_smarty->template_exists($template="mailing.html.tpl") 
    || !$text_smarty->template_exists($template="mailing.txt.tpl")) 
    { 
        echo "Please copy the template file templates/".$template." to your Smarty templates directory.\n"; 
        exit; 
    } 
 
 
    /*  Create empty parts for the parts that will be personalized for each recipient. 
     *  HTML message values should be escaped with HTMLEntities(). 
     */ 
    $html_smarty->assign("subject",HtmlEntities($subject)); 
    $html_smarty->assign("fromname",HtmlEntities($from_name)); 
    $html_smarty->assign("firstname",""); 
    $html_smarty->assign("balance","0"); 
    $html_smarty->assign("email","?"); 
    $html_message=$html_smarty->fetch("mailing.html.tpl"); 
 
    $email_message->CreateQuotedPrintableHTMLPart($html_message,"",$html_part); 
 
/* 
 *  It is strongly recommended that when you send HTML messages, 
 *  also provide an alternative text version of HTML page, 
 *  even if it is just to say that the message is in HTML, 
 *  because more and more people tend to delete HTML only 
 *  messages assuming that HTML only messages are spam. 
 */ 
    $text_smarty->assign("subject",$subject); 
    $text_smarty->assign("fromname",$from_name); 
    $text_smarty->assign("firstname",""); 
    $text_smarty->assign("balance","0"); 
    $text_smarty->assign("email","?"); 
    $text_message=$text_smarty->fetch("mailing.txt.tpl"); 
    $email_message->CreateQuotedPrintableTextPart($email_message->WrapText($text_message),"",$text_part); 
 
/* 
 *  Multiple alternative parts are gathered in multipart/alternative parts. 
 *  It is important that the fanciest part, in this case the HTML part, 
 *  is specified as the last part because that is the way that HTML capable 
 *  mail programs will show that part and not the text version part. 
 */ 
    $alternative_parts=array( 
        $text_part, 
        $html_part 
    ); 
    $email_message->AddAlternativeMultipart($alternative_parts); 
 
    /* Iterate personalization for each recipient. */ 
    for($recipient=0;$recipient<count($to);$recipient++) 
    { 
 
        /* Personalize the recipient address. */ 
        $to_address=$to[$recipient]["address"]; 
        $to_name=$to[$recipient]["name"]; 
        $email_message->SetEncodedEmailHeader("To",$to_address,$to_name); 
 
        /* Do we really need to personalize the message body? 
         * If not, let the class reuse the message body defined for the first recipient above. 
         */ 
        if(!$email_message->cache_body) 
        { 
            /* 
             *  Create a personalized body parts, either HTML and text 
             *  alternative parts. 
             */ 
 
            $first_name=strtok($to_name," "); 
            $balance=number_format($to[$recipient]["balance"],2); 
 
            $html_smarty->assign("firstname",HtmlEntities($first_name)); 
            $html_smarty->assign("balance",HtmlEntities($balance)); 
            $html_smarty->assign("email",HtmlEntities($to_address)); 
            $email_message->CreateQuotedPrintableHtmlPart($html_smarty->fetch("mailing.html.tpl"),"",$recipient_html_part); 
 
            /* Make the personalized replace the initially empty HTML part */ 
            $email_message->ReplacePart($html_part,$recipient_html_part); 
 
            $text_smarty->assign("firstname",$first_name); 
            $text_smarty->assign("balance",$balance); 
            $text_smarty->assign("email",$to_address); 
            $email_message->CreateQuotedPrintableTextPart($email_message->WrapText($text_smarty->fetch("mailing.txt.tpl")),"",$recipient_text_part); 
 
            /* Make the personalized replace the initially empty text part */ 
            $email_message->ReplacePart($text_part,$recipient_text_part); 
        } 
 
        /* Send the message checking for eventually acumulated errors */ 
        $error=$email_message->Send(); 
        if(strlen($error)) 
            break; 
    } 
 
    /* When you are done with bulk mailing call the SetBulkMail function 
     * again passing 0 to tell the all deliveries were done. 
     */ 
    $email_message->SetBulkMail(0); 
 
    if(strlen($error)) 
        echo "Error: $error\n"; 
 
    echo "Done!\n"; 
?>
 
 |