<?php /******************************************************************************* Name: Email Description: This class is used for sending emails. These emails can be Plain Text, HTML, or Both. Other uses include file Attachments and email Templates(from a file). Testing: test_email.php3: $mail->setTo("[email protected]"); $mail->send(); Changelog: Date Name Description ----------- ----------- ------------------------------------------------ 10/21/1999 R.Chambers created *******************************************************************************/ /******************************************************************************* Issues: no error reporting can only send HTML with TEXT can only send attachements with HTML and TEXT *******************************************************************************/ /******************************************************************************* Function Listing: setTo($inAddress) setCC($inAddress) setBCC($inAddress) setFrom($inAddress) setSubject($inSubject) setText($inText) setHTML($inHTML) setAttachments($inAttachments) checkEmail($inAddress) loadTemplate($inFileLocation,$inHash,$inFormat) getRandomBoundary($offset) getContentType() formatTextHeader() formatHTMLHeader() formatAttachmentHeader($inFileLocation) send() *******************************************************************************/ class Email { //---Global Variables var $mailTo = ""; // array of To addresses var $mailCC = ""; // copied recipients var $mailBCC = ""; // hidden recipients var $mailFrom = ""; // from address var $mailSubject = ""; // email subject var $mailText = ""; // plain text message var $mailHTML = ""; // html message var $mailAttachments = ""; // array of attachments /******************************************************************************* Function: setTo($inAddress) Description: sets the email To address Arguments: $inAddress as string separate multiple values with comma Returns: true if set *******************************************************************************/ function setTo($inAddress){ //--split addresses at commas $addressArray = explode(",",$inAddress); //--loop through each address and exit on error for($i=0;$i<count($addressArray);$i++){ if($this->checkEmail($addressArray[$i])==false) return false; } //--all values are OK so implode array into string $this->mailTo = implode($addressArray,","); return true; } /******************************************************************************* Function: setCC($inAddress) Description: sets the email cc address Arguments: $inAddress as string separate multiple values with comma Returns: true if set *******************************************************************************/ function setCC($inAddress){ //--split addresses at commas $addressArray = explode(",",$inAddress); //--loop through each address and exit on error for($i=0;$i<count($addressArray);$i++){ if($this->checkEmail($addressArray[$i])==false) return false; } //--all values are OK so implode array into string $this->mailCC = implode($addressArray,","); return true; } /******************************************************************************* Function: setBCC($inAddress) Description: sets the email bcc address Arguments: $inAddress as string separate multiple values with comma Returns: true if set *******************************************************************************/ function setBCC($inAddress){ //--split addresses at commas $addressArray = explode(",",$inAddress); //--loop through each address and exit on error for($i=0;$i<count($addressArray);$i++){ if($this->checkEmail($addressArray[$i])==false) return false; } //--all values are OK so implode array into string $this->mailBCC = implode($addressArray,","); return true; } /******************************************************************************* Function: setFrom($inAddress) Description: sets the email FROM address Arguments: $inAddress as string (takes single email address) Returns: true if set *******************************************************************************/ function setFrom($inAddress){ if($this->checkEmail($inAddress)){ $this->mailFrom = $inAddress; return true; } return false; }
/******************************************************************************* Function: setSubject($inSubject) Description: sets the email subject Arguments: $inSubject as string Returns: true if set *******************************************************************************/ function setSubject($inSubject){ if(strlen(trim($inSubject)) > 0){ $this->mailSubject = ereg_replace("\n","",$inSubject); return true; } return false; } /******************************************************************************* Function: setText($inText) Description: sets the email text Arguments: $inText as string Returns: true if set *******************************************************************************/ function setText($inText){ if(strlen(trim($inText)) > 0){ $this->mailText = $inText; return true; } return false; } /******************************************************************************* Function: setHTML($inHTML) Description: sets the email HMTL Arguments: $inHTML as string Returns: true if set *******************************************************************************/ function setHTML($inHTML){ if(strlen(trim($inHTML)) > 0){ $this->mailHTML = $inHTML; return true; } return false; } /******************************************************************************* Function: setAttachments($inAttachments) Description: stores the Attachment string Arguments: $inAttachments as string with directory included separate multiple values with comma Returns: true if stored *******************************************************************************/ function setAttachments($inAttachments){ if(strlen(trim($inAttachments)) > 0){ $this->mailAttachments = $inAttachments; return true; } return false; } /******************************************************************************* Function: checkEmail($inAddress) Description: checks for valid email Arguments: $inAddress as string Returns: true if valid *******************************************************************************/ function checkEmail($inAddress){ return (ereg( "^[^@ ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)\$",$inAddress)); } /******************************************************************************* Function: loadTemplate($inFileLocation,$inHash,$inFormat) Description: reads in a template file and replaces hash values Arguments: $inFileLocation as string with relative directory $inHash as Hash with populated values $inFormat as string either "text" or "html" Returns: true if loaded *******************************************************************************/ function loadTemplate($inFileLocation,$inHash,$inFormat){ /* template files have lines such as: Dear ~!UserName~, Your address is ~!UserAddress~ */ //--specify template delimeters $templateDelim = "~"; $templateNameStart = "!"; //--set out string $templateLineOut = ""; //--open template file if($templateFile = fopen($inFileLocation,"r")){ //--loop through file, line by line while(!feof($templateFile)){ //--get 1000 chars or (line break internal to fgets) $templateLine = fgets($templateFile,1000); //--split line into array of hashNames and regular sentences $templateLineArray = explode($templateDelim,$templateLine); //--loop through array for( $i=0; $i<count($templateLineArray);$i++){ //--look for $templateNameStart at position 0 if(strcspn($templateLineArray[$i],$templateNameStart)==0){ //--get hashName after $templateNameStart $hashName = substr($templateLineArray[$i],1); //--replace hashName with acual value in $inHash //--(string) casts all values as "strings" $templateLineArray[$i] = ereg_replace($hashName,(string)$inHash[$hashName],$hashName); } } //--output array as string and add to out string $templateLineOut .= implode($templateLineArray,""); } //--close file fclose($templateFile); //--set Mail body to proper format if( strtoupper($inFormat)=="TEXT" ) return($this->setText($templateLineOut)); else if( strtoupper($inFormat)=="HTML" ) return($this->setHTML($templateLineOut)); } return false; } /******************************************************************************* Function: getRandomBoundary($offset) Description: returns a random boundary Arguments: $offset as integer - used for multiple calls Returns: string *******************************************************************************/ function getRandomBoundary($offset = 0){ //--seed random number generator srand(time()+$offset); //--return md5 32 bits plus 4 dashes to make 38 chars return ("----".(md5(rand()))); } /******************************************************************************* Function: getContentType($inFileName) Description: returns content type for the file type Arguments: $inFileName as file name string (can include path) Returns: string *******************************************************************************/ function getContentType($inFileName){ //--strip path $inFileName = basename($inFileName); //--check for no extension if(strrchr($inFileName,".") == false){ return "application/octet-stream"; } //--get extension and check cases $extension = strrchr($inFileName,"."); switch($extension){ case ".gif": return "image/gif"; case ".gz": return "application/x-gzip"; case ".htm": return "text/html"; case ".html": return "text/html"; case ".jpg": return "image/jpeg"; case ".tar": return "application/x-tar"; case ".txt": return "text/plain"; case ".zip": return "application/zip"; default: return "application/octet-stream"; } return "application/octet-stream"; } /******************************************************************************* Function: formatTextHeader Description: returns a formated header for text Arguments: none Returns: string *******************************************************************************/ function formatTextHeader(){ $outTextHeader = ""; $outTextHeader .= "Content-Type: text/plain; charset=us-ascii\n"; $outTextHeader .= "Content-Transfer-Encoding: 7bit\n\n"; $outTextHeader .= $this->mailText."\n"; return $outTextHeader; }
/******************************************************************************* Function: formatHTMLHeader Description: returns a formated header for HTML Arguments: none Returns: string *******************************************************************************/ function formatHTMLHeader(){ $outHTMLHeader = ""; $outHTMLHeader .= "Content-Type: text/html; charset=us-ascii\n"; $outHTMLHeader .= "Content-Transfer-Encoding: 7bit\n\n"; $outHTMLHeader .= $this->mailHTML."\n"; return $outHTMLHeader; } /******************************************************************************* Function: formatAttachmentHeader($inFileLocation) Description: returns a formated header for an attachment Arguments: $inFileLocation as string with relative directory Returns: string *******************************************************************************/ function formatAttachmentHeader($inFileLocation){ $outAttachmentHeader = ""; //--get content type based on file extension $contentType = $this->getContentType($inFileLocation); //--if content type is TEXT the standard 7bit encoding if(ereg("text",$contentType)){ //--format header $outAttachmentHeader .= "Content-Type: ".$contentType.";\n"; $outAttachmentHeader .= ' name="'.basename($inFileLocation).'"'."\n"; $outAttachmentHeader .= "Content-Transfer-Encoding: 7bit\n"; $outAttachmentHeader .= "Content-Disposition: attachment;\n"; //--other: inline $outAttachmentHeader .= ' filename="'.basename($inFileLocation).'"'."\n\n"; $textFile = fopen($inFileLocation,"r"); //--loop through file, line by line while(!feof($textFile)){ //--get 1000 chars or (line break internal to fgets) $outAttachmentHeader .= fgets($textFile,1000); } //--close file fclose($textFile); $outAttachmentHeader .= "\n"; } //--NON-TEXT use 64-bit encoding else{ //--format header $outAttachmentHeader .= "Content-Type: ".$contentType.";\n"; $outAttachmentHeader .= ' name="'.basename($inFileLocation).'"'."\n"; $outAttachmentHeader .= "Content-Transfer-Encoding: base64\n"; $outAttachmentHeader .= "Content-Disposition: attachment;\n"; //--other: inline $outAttachmentHeader .= ' filename="'.basename($inFileLocation).'"'."\n\n"; //--call uuencode - output is returned to the return array exec("uuencode -m $inFileLocation nothing_out",$returnArray); //--add each line returned for ($i = 1; $i<(count($returnArray)); $i++){ $outAttachmentHeader .= $returnArray[$i]."\n"; } } return $outAttachmentHeader; } /******************************************************************************* Function: send() Description: sends the email Arguments: none Returns: true if sent *******************************************************************************/ function send(){ //--set mail header to blank $mailHeader = ""; //--add CC if($this->mailCC != "") $mailHeader .= "CC: ".$this->mailCC."\n"; //--add BCC if($this->mailBCC != "") $mailHeader .= "BCC: ".$this->mailBCC."\n"; //--add From if($this->mailFrom != "") $mailHeader .= "FROM: ".$this->mailFrom."\n"; //---------------------------MESSAGE TYPE------------------------------- //--TEXT ONLY if($this->mailText != "" && $this->mailHTML == "" && $this->mailAttachments == ""){ return mail($this->mailTo,$this->mailSubject,$this->mailText,$mailHeader); } //--HTML AND TEXT else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments == ""){ //--get random boundary for content types $bodyBoundary = $this->getRandomBoundary(); //--format headers $textHeader = $this->formatTextHeader(); $htmlHeader = $this->formatHTMLHeader(); //--set MIME-Version $mailHeader .= "MIME-Version: 1.0\n"; //--set up main content header with boundary $mailHeader .= "Content-Type: multipart/alternative;\n"; $mailHeader .= ' boundary="'.$bodyBoundary.'"'; $mailHeader .= "\n\n\n"; //--add body and boundaries $mailHeader .= "--".$bodyBoundary."\n"; $mailHeader .= $textHeader; $mailHeader .= "--".$bodyBoundary."\n"; //--add html and ending boundary $mailHeader .= $htmlHeader; $mailHeader .= "\n--".$bodyBoundary."--"; //--send message return mail($this->mailTo,$this->mailSubject,"",$mailHeader); } //--HTML AND TEXT AND ATTACHMENTS else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments != ""){
//--get random boundary for attachments $attachmentBoundary = $this->getRandomBoundary(); //--set main header for all parts and boundary $mailHeader .= "Content-Type: multipart/mixed;\n"; $mailHeader .= ' boundary="'.$attachmentBoundary.'"'."\n\n"; $mailHeader .= "This is a multi-part message in MIME format.\n"; $mailHeader .= "--".$attachmentBoundary."\n";
//--TEXT AND HTML-- //--get random boundary for content types $bodyBoundary = $this->getRandomBoundary(1); //--format headers $textHeader = $this->formatTextHeader(); $htmlHeader = $this->formatHTMLHeader(); //--set MIME-Version $mailHeader .= "MIME-Version: 1.0\n"; //--set up main content header with boundary $mailHeader .= "Content-Type: multipart/alternative;\n"; $mailHeader .= ' boundary="'.$bodyBoundary.'"'; $mailHeader .= "\n\n\n"; //--add body and boundaries $mailHeader .= "--".$bodyBoundary."\n"; $mailHeader .= $textHeader; $mailHeader .= "--".$bodyBoundary."\n"; //--add html and ending boundary $mailHeader .= $htmlHeader; $mailHeader .= "\n--".$bodyBoundary."--"; //--send message //--END TEXT AND HTML
//--get array of attachment filenames $attachmentArray = explode(",",$this->mailAttachments); //--loop through each attachment for($i=0;$i<count($attachmentArray);$i++){ //--attachment separator $mailHeader .= "\n--".$attachmentBoundary."\n"; //--get attachment info $mailHeader .= $this->formatAttachmentHeader($attachmentArray[$i]); } $mailHeader .= "--".$attachmentBoundary."--"; return mail($this->mailTo,$this->mailSubject,"",$mailHeader); } return false; } } ?>
/*******************************************************************************
Name: Email
Description: This class is used for sending emails.
These emails can be
Plain Text, HTML, or Both. Other uses include file
Attachments and email Templates(from a file).
Testing:
test_email.php3: $mail->setTo("[email protected]");
$mail->send();
Changelog:
Date Name Description
----------- ----------- ------------------------------------------------
10/21/1999 R.Chambers created
*******************************************************************************/
/*******************************************************************************
Issues:
no error reporting
can only send HTML with TEXT
can only send attachements with HTML and TEXT
*******************************************************************************/
/*******************************************************************************
Function Listing:
setTo($inAddress)
setCC($inAddress)
setBCC($inAddress)
setFrom($inAddress)
setSubject($inSubject)
setText($inText)
setHTML($inHTML)
setAttachments($inAttachments)
checkEmail($inAddress)
loadTemplate($inFileLocation,$inHash,$inFormat)
getRandomBoundary($offset)
getContentType()
formatTextHeader()
formatHTMLHeader()
formatAttachmentHeader($inFileLocation)
send()
*******************************************************************************/ class Email
{
//---Global Variables
var $mailTo = ""; // array of To addresses
var $mailCC = ""; // copied recipients
var $mailBCC = ""; // hidden recipients
var $mailFrom = ""; // from address
var $mailSubject = ""; // email subject
var $mailText = ""; // plain text message
var $mailHTML = ""; // html message
var $mailAttachments = ""; // array of attachments /*******************************************************************************
Function: setTo($inAddress)
Description: sets the email To address
Arguments: $inAddress as string
separate multiple values with comma
Returns: true if set
*******************************************************************************/
function setTo($inAddress){
//--split addresses at commas
$addressArray = explode(",",$inAddress);
//--loop through each address and exit on error
for($i=0;$i<count($addressArray);$i++){
if($this->checkEmail($addressArray[$i])==false) return false;
}
//--all values are OK so implode array into string
$this->mailTo = implode($addressArray,",");
return true;
}
/*******************************************************************************
Function: setCC($inAddress)
Description: sets the email cc address
Arguments: $inAddress as string
separate multiple values with comma
Returns: true if set
*******************************************************************************/
function setCC($inAddress){
//--split addresses at commas
$addressArray = explode(",",$inAddress);
//--loop through each address and exit on error
for($i=0;$i<count($addressArray);$i++){
if($this->checkEmail($addressArray[$i])==false) return false;
}
//--all values are OK so implode array into string
$this->mailCC = implode($addressArray,",");
return true;
}
/*******************************************************************************
Function: setBCC($inAddress)
Description: sets the email bcc address
Arguments: $inAddress as string
separate multiple values with comma
Returns: true if set
*******************************************************************************/
function setBCC($inAddress){
//--split addresses at commas
$addressArray = explode(",",$inAddress);
//--loop through each address and exit on error
for($i=0;$i<count($addressArray);$i++){
if($this->checkEmail($addressArray[$i])==false) return false;
}
//--all values are OK so implode array into string
$this->mailBCC = implode($addressArray,",");
return true;
}
/*******************************************************************************
Function: setFrom($inAddress)
Description: sets the email FROM address
Arguments: $inAddress as string (takes single email address)
Returns: true if set
*******************************************************************************/
function setFrom($inAddress){
if($this->checkEmail($inAddress)){
$this->mailFrom = $inAddress;
return true;
}
return false;
}
Function: setSubject($inSubject)
Description: sets the email subject
Arguments: $inSubject as string
Returns: true if set
*******************************************************************************/
function setSubject($inSubject){
if(strlen(trim($inSubject)) > 0){
$this->mailSubject = ereg_replace("\n","",$inSubject);
return true;
}
return false;
}
/*******************************************************************************
Function: setText($inText)
Description: sets the email text
Arguments: $inText as string
Returns: true if set
*******************************************************************************/
function setText($inText){
if(strlen(trim($inText)) > 0){
$this->mailText = $inText;
return true;
}
return false;
}
/*******************************************************************************
Function: setHTML($inHTML)
Description: sets the email HMTL
Arguments: $inHTML as string
Returns: true if set
*******************************************************************************/
function setHTML($inHTML){
if(strlen(trim($inHTML)) > 0){
$this->mailHTML = $inHTML;
return true;
}
return false;
}
/*******************************************************************************
Function: setAttachments($inAttachments)
Description: stores the Attachment string
Arguments: $inAttachments as string with directory included
separate multiple values with comma
Returns: true if stored
*******************************************************************************/
function setAttachments($inAttachments){
if(strlen(trim($inAttachments)) > 0){
$this->mailAttachments = $inAttachments;
return true;
}
return false;
}
/*******************************************************************************
Function: checkEmail($inAddress)
Description: checks for valid email
Arguments: $inAddress as string
Returns: true if valid
*******************************************************************************/
function checkEmail($inAddress){
return (ereg( "^[^@ ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)\$",$inAddress));
}
/*******************************************************************************
Function: loadTemplate($inFileLocation,$inHash,$inFormat)
Description: reads in a template file and replaces hash values
Arguments: $inFileLocation as string with relative directory
$inHash as Hash with populated values
$inFormat as string either "text" or "html"
Returns: true if loaded
*******************************************************************************/
function loadTemplate($inFileLocation,$inHash,$inFormat){
/*
template files have lines such as:
Dear ~!UserName~,
Your address is ~!UserAddress~
*/
//--specify template delimeters
$templateDelim = "~";
$templateNameStart = "!";
//--set out string
$templateLineOut = "";
//--open template file
if($templateFile = fopen($inFileLocation,"r")){
//--loop through file, line by line
while(!feof($templateFile)){
//--get 1000 chars or (line break internal to fgets)
$templateLine = fgets($templateFile,1000);
//--split line into array of hashNames and regular sentences
$templateLineArray = explode($templateDelim,$templateLine);
//--loop through array
for( $i=0; $i<count($templateLineArray);$i++){
//--look for $templateNameStart at position 0
if(strcspn($templateLineArray[$i],$templateNameStart)==0){
//--get hashName after $templateNameStart
$hashName = substr($templateLineArray[$i],1);
//--replace hashName with acual value in $inHash
//--(string) casts all values as "strings"
$templateLineArray[$i] = ereg_replace($hashName,(string)$inHash[$hashName],$hashName);
}
}
//--output array as string and add to out string
$templateLineOut .= implode($templateLineArray,"");
}
//--close file
fclose($templateFile);
//--set Mail body to proper format
if( strtoupper($inFormat)=="TEXT" ) return($this->setText($templateLineOut));
else if( strtoupper($inFormat)=="HTML" ) return($this->setHTML($templateLineOut));
}
return false;
}
/*******************************************************************************
Function: getRandomBoundary($offset)
Description: returns a random boundary
Arguments: $offset as integer - used for multiple calls
Returns: string
*******************************************************************************/
function getRandomBoundary($offset = 0){
//--seed random number generator
srand(time()+$offset);
//--return md5 32 bits plus 4 dashes to make 38 chars
return ("----".(md5(rand())));
}
/*******************************************************************************
Function: getContentType($inFileName)
Description: returns content type for the file type
Arguments: $inFileName as file name string (can include path)
Returns: string
*******************************************************************************/
function getContentType($inFileName){
//--strip path
$inFileName = basename($inFileName);
//--check for no extension
if(strrchr($inFileName,".") == false){
return "application/octet-stream";
}
//--get extension and check cases
$extension = strrchr($inFileName,".");
switch($extension){
case ".gif": return "image/gif";
case ".gz": return "application/x-gzip";
case ".htm": return "text/html";
case ".html": return "text/html";
case ".jpg": return "image/jpeg";
case ".tar": return "application/x-tar";
case ".txt": return "text/plain";
case ".zip": return "application/zip";
default: return "application/octet-stream";
}
return "application/octet-stream";
}
/*******************************************************************************
Function: formatTextHeader
Description: returns a formated header for text
Arguments: none
Returns: string
*******************************************************************************/
function formatTextHeader(){
$outTextHeader = "";
$outTextHeader .= "Content-Type: text/plain; charset=us-ascii\n";
$outTextHeader .= "Content-Transfer-Encoding: 7bit\n\n";
$outTextHeader .= $this->mailText."\n";
return $outTextHeader;
}
Function: formatHTMLHeader
Description: returns a formated header for HTML
Arguments: none
Returns: string
*******************************************************************************/
function formatHTMLHeader(){
$outHTMLHeader = "";
$outHTMLHeader .= "Content-Type: text/html; charset=us-ascii\n";
$outHTMLHeader .= "Content-Transfer-Encoding: 7bit\n\n";
$outHTMLHeader .= $this->mailHTML."\n";
return $outHTMLHeader;
}
/*******************************************************************************
Function: formatAttachmentHeader($inFileLocation)
Description: returns a formated header for an attachment
Arguments: $inFileLocation as string with relative directory
Returns: string
*******************************************************************************/
function formatAttachmentHeader($inFileLocation){
$outAttachmentHeader = "";
//--get content type based on file extension
$contentType = $this->getContentType($inFileLocation);
//--if content type is TEXT the standard 7bit encoding
if(ereg("text",$contentType)){
//--format header
$outAttachmentHeader .= "Content-Type: ".$contentType.";\n";
$outAttachmentHeader .= ' name="'.basename($inFileLocation).'"'."\n";
$outAttachmentHeader .= "Content-Transfer-Encoding: 7bit\n";
$outAttachmentHeader .= "Content-Disposition: attachment;\n"; //--other: inline
$outAttachmentHeader .= ' filename="'.basename($inFileLocation).'"'."\n\n";
$textFile = fopen($inFileLocation,"r");
//--loop through file, line by line
while(!feof($textFile)){
//--get 1000 chars or (line break internal to fgets)
$outAttachmentHeader .= fgets($textFile,1000);
}
//--close file
fclose($textFile);
$outAttachmentHeader .= "\n";
}
//--NON-TEXT use 64-bit encoding
else{
//--format header
$outAttachmentHeader .= "Content-Type: ".$contentType.";\n";
$outAttachmentHeader .= ' name="'.basename($inFileLocation).'"'."\n";
$outAttachmentHeader .= "Content-Transfer-Encoding: base64\n";
$outAttachmentHeader .= "Content-Disposition: attachment;\n"; //--other: inline
$outAttachmentHeader .= ' filename="'.basename($inFileLocation).'"'."\n\n";
//--call uuencode - output is returned to the return array
exec("uuencode -m $inFileLocation nothing_out",$returnArray);
//--add each line returned
for ($i = 1; $i<(count($returnArray)); $i++){
$outAttachmentHeader .= $returnArray[$i]."\n";
}
}
return $outAttachmentHeader;
}
/*******************************************************************************
Function: send()
Description: sends the email
Arguments: none
Returns: true if sent
*******************************************************************************/
function send(){
//--set mail header to blank
$mailHeader = "";
//--add CC
if($this->mailCC != "") $mailHeader .= "CC: ".$this->mailCC."\n";
//--add BCC
if($this->mailBCC != "") $mailHeader .= "BCC: ".$this->mailBCC."\n";
//--add From
if($this->mailFrom != "") $mailHeader .= "FROM: ".$this->mailFrom."\n"; //---------------------------MESSAGE TYPE-------------------------------
//--TEXT ONLY
if($this->mailText != "" && $this->mailHTML == "" && $this->mailAttachments == ""){
return mail($this->mailTo,$this->mailSubject,$this->mailText,$mailHeader);
}
//--HTML AND TEXT
else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments == ""){
//--get random boundary for content types
$bodyBoundary = $this->getRandomBoundary();
//--format headers
$textHeader = $this->formatTextHeader();
$htmlHeader = $this->formatHTMLHeader();
//--set MIME-Version
$mailHeader .= "MIME-Version: 1.0\n";
//--set up main content header with boundary
$mailHeader .= "Content-Type: multipart/alternative;\n";
$mailHeader .= ' boundary="'.$bodyBoundary.'"';
$mailHeader .= "\n\n\n";
//--add body and boundaries
$mailHeader .= "--".$bodyBoundary."\n";
$mailHeader .= $textHeader;
$mailHeader .= "--".$bodyBoundary."\n";
//--add html and ending boundary
$mailHeader .= $htmlHeader;
$mailHeader .= "\n--".$bodyBoundary."--";
//--send message
return mail($this->mailTo,$this->mailSubject,"",$mailHeader);
}
//--HTML AND TEXT AND ATTACHMENTS
else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments != ""){
//--get random boundary for attachments
$attachmentBoundary = $this->getRandomBoundary();
//--set main header for all parts and boundary
$mailHeader .= "Content-Type: multipart/mixed;\n";
$mailHeader .= ' boundary="'.$attachmentBoundary.'"'."\n\n";
$mailHeader .= "This is a multi-part message in MIME format.\n";
$mailHeader .= "--".$attachmentBoundary."\n";
//--TEXT AND HTML--
//--get random boundary for content types
$bodyBoundary = $this->getRandomBoundary(1);
//--format headers
$textHeader = $this->formatTextHeader();
$htmlHeader = $this->formatHTMLHeader();
//--set MIME-Version
$mailHeader .= "MIME-Version: 1.0\n";
//--set up main content header with boundary
$mailHeader .= "Content-Type: multipart/alternative;\n";
$mailHeader .= ' boundary="'.$bodyBoundary.'"';
$mailHeader .= "\n\n\n";
//--add body and boundaries
$mailHeader .= "--".$bodyBoundary."\n";
$mailHeader .= $textHeader;
$mailHeader .= "--".$bodyBoundary."\n";
//--add html and ending boundary
$mailHeader .= $htmlHeader;
$mailHeader .= "\n--".$bodyBoundary."--";
//--send message
//--END TEXT AND HTML
//--get array of attachment filenames
$attachmentArray = explode(",",$this->mailAttachments);
//--loop through each attachment
for($i=0;$i<count($attachmentArray);$i++){
//--attachment separator
$mailHeader .= "\n--".$attachmentBoundary."\n";
//--get attachment info
$mailHeader .= $this->formatAttachmentHeader($attachmentArray[$i]);
}
$mailHeader .= "--".$attachmentBoundary."--";
return mail($this->mailTo,$this->mailSubject,"",$mailHeader);
}
return false;
}
}
?>
www.chinesehis.com/editmail.php