PX : code

Email Template Class by Eric Hanson
Download this code


<?php
/*******************************************************************
Email loading/parsing/sending class
By Eric Hanson, eric@cornado.com, http://www.cornado.com/
April 5, 1999

- send () sends the email
- load () reads an email template from file, replacing variables with literals
- report () prints a simple report of the email
- supports full names like 
  Bill Clinton <president@whitehouse.gov>

This code can be used for anything you'd like.  See examples at
http://www.cornado.com/dev/email.inc/

Music of choice while programming:
  They Might Be Giants, Orb, Propellerheads, Hempilation ][, Phish

---example usage begin---
require "email.inc";

// some variables that have been set
$firstname = "Juan";
$lastname  = "Sanchez";
$email     = "j@phileric.com";

// the list of variables to be parsed out of the email file 
$globals = "\$firstname, \$lastname, \$email";

// instantiate
$e = new Email;

// load 
if (!$e->load ("example.txt",$globals)) 
  print "Could not load.";

// report
$e->report();

// send
if (!$e->send()) 
  print "Could not send.";
?>
---example usage end---

---example email template begin---
to: <$firstname $lastname> $email
from: <Eric Hanson> eric@cornado.com
subject: Welcome to the secret society $firstname!
Dearest $firstname,

Welcome!  You are now a member of the secret society.

Sincerely,
Eric
---example email template end---
  
********************************************************************/ 

if ($EMAIL_INC) return;
$EMAIL_INC"defined";

class 
Email {
  var 
$subject;                         // string the email's subject 
  
var $from_email;                      // string sender's email address 
  
var $from_name;                       // string sender's name (opt) 
  
var $to_email;                        // string recipient's email 
  
var $to_name;                         // string recipient's name (opt) 
  
var $body;                            // string body copy 
  
var $filename;                        // the filename 

   /*
  bool load ($filename)
  loads an email from file, and parses out variables, subject, to, from, etc.
  */ 
  
  
function load ($filename =  "",$globals"") {
    if (!
$filename) { $filename $this->filename; }
    
    if (!
$dump file ($filename)) {
      return 
0;
    }
    
    if (
$globals) {
      eval ( 
"global $globals;");
    }
    
     
/* for each line in the file, replace any variables with their values 
    and use lines that start with to:, from:, or subject: to set their
    respective values. */ 
    
    
while (list($key,$val) = each($dump)) {
       
/*
      replace variables in the textfile with their actual values.
      */ 
      
if (ereg"\$",$val)) {
        
$val addslashes ($val);      
        eval(  
"\$val = \"$val\";");
        
$val stripslashes ($val);
      }
      
      if (
eregi" *to: *<([^>]*)> *([^ ]*) *",$val,$regs)) {
        
$this->to_name $regs[1];
        
$this->to_email chop($regs[2]);
      }
      else if (
eregi"^ *to: *([^ ]*).*",$val,$regs)) {
        
$this->to_email chop($regs[1]);
      }
      else if (
eregi" *from: *<([^>]*)> *([^ ]*) *",$val,$regs)) {
        
$this->from_name $regs[1];
        
$this->from_email chop($regs[2]);
      }
      else if (
eregi"^ *from: *(.*)",$val,$regs)) {
        
$this->from_email chop($regs[1]);
      }
      else if (
eregi"^ *subject: *(.*)",$val,$regs)) {
        
$this->subject chop($regs[1]);
      }
      else {
        
$this->body=$this->body.$val;
      }
    }
    return 
1;
  }
  
  function 
send () {
     
/* set the from line */ 
    
if ($this->from_name) {
      
$from_line =  "From: ".$this->from_name" <".$this->from_email">\n";
    }
    else {
      
$from_line =  "From: ".$this->from_email"\n";
    }
    
     
/* set the to line */ 
    
if ($this->to_name) {
      
$to_line $this->to_name" <".$this->to_email">";
    }
    else {
      
$to_line $this->to_email;
    }
    
    return 
mail(
      
$to_line,
      
$this->subject,
      
$this->body,
      
$from_line);
  }
  
  function 
report () {
?>  
    <table>
      <tr>
        <td align="right">
      <b>To:</b>
    </td>
    <td>
<?php
      
if ($this->to_name) {
        print   
"&lt;".$this->to_name"&gt; ";
      }
      print 
$this->to_email;
?>
    </td>
      </tr>
      <tr>
        <td align="right">
      <b>From:</b>
    </td>
    <td>
<?php 
      
if ($this->from_name) { 
        print   
"&lt;".$this->from_name"&gt; ";
      }
      print 
$this->from_email
?>
    </td>
      </tr>
      <tr>
        <td align="right">
      <b>Subject:</b>
    </td>
    <td>
<?php 
      
print $this->subject
?>
    </td>
      </tr>
      <tr>
        <td align="right" valign="top">
      <b>Body:</b>
    </td>
    <td><pre>
<?php 
      
print $this->body
?>
    </td></pre>
      </tr>
    </table>
<?php      
  
}
}
?>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.