<?php
define("CRLF", "\r\n");
class Email {
var $mailTo = "";
var $mailCC = "";
var $mailBCC = "";
var $mailFrom = "";
var $mailSubject = "";
var $mailText = "";
var $mailHTML = "";
var $mailAttachments = "";
var $bodyBoundary="";
function setTo($inAddress){
$this->mailTo = $inAddress;
return true;
}
function setCC($inAddress){
$this->mailCC = $inAddress;
return true;
}
function setBCC($inAddress){
$this->mailBCC = $inAddress;
return true;
}
function setFrom($inAddress){
$this->mailFrom = $inAddress;
return true;
}
function setSubject($inSubject){
$this->mailSubject = "=?" . MAIL_CHARSET . "?B?" . base64_encode($inSubject) . "?=";
return true;
}
function setText($inText){
if(strlen(trim($inText)) > 0){
$this->mailText = $inText;
return true;
}
return false;
}
function setHTML($inHTML){
if(strlen(trim($inHTML)) > 0){
$this->mailHTML = $inHTML;
return true;
}
return false;
}
function setAttachments($inAttachments){
if(strlen(trim($inAttachments)) > 0){
$this->mailAttachments = $inAttachments;
return true;
}
return false;
}
function setRandomBoundary(){
$this->bodyBoundary = md5(uniqid(time()));
}
function getContentType($inFileName){
$inFileName = basename($inFileName);
if(strrchr($inFileName, ".") == false){
return "application/octet-stream";
}
$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";
case ".xls": return "application/vnd.ms-excel";
default: return "application/octet-stream";
}
return "application/octet-stream";
}
function formatTextBody(){
$outTextBody = "";
$outTextBody .= "Content-Type: text/plain;charset=" . MAIL_CHARSET . CRLF;
$outTextBody .= "Content-Transfer-Encoding: 7bit". CRLF . CRLF;
$outTextBody .= $this->mailText . CRLF;
return $outTextBody;
}
function formatHTMLBody(){
$outHTMLBody = "";
$outHTMLBody .= "Content-Type: text/html;charset=" . MAIL_CHARSET . CRLF;
$outHTMLBody .= "Content-Transfer-Encoding: 7bit". CRLF . CRLF;
$outHTMLBody .= $this->mailHTML . CRLF;
return $outHTMLBody;
}
function formatAttachmentHeader($inFileLocation){
$outAttachmentHeader = "";
$contentType = $this->getContentType($inFileLocation);
if(ereg( "text",$contentType)){
$outAttachmentHeader .= "Content-Type: ".$contentType. ";" . CRLF;
$outAttachmentHeader .= ' name="'.basename($inFileLocation). '"' . CRLF;
$outAttachmentHeader .= "Content-Transfer-Encoding: 7bit" . CRLF;
$outAttachmentHeader .= "Content-Disposition: attachment;" . CRLF;
$outAttachmentHeader .= ' filename="'.basename($inFileLocation). '"' . CRLF . CRLF;
$textFile = fopen($inFileLocation, "r");
while(!feof($textFile)){
$outAttachmentHeader .= fgets($textFile, 1000);
}
$outAttachmentHeader .= CRLF;
}
else {
$outAttachmentHeader .= "Content-Type: ".$contentType. ";" . CRLF;
$outAttachmentHeader .= ' name="'.basename($inFileLocation). '"' . CRLF;
$outAttachmentHeader .= "Content-Transfer-Encoding: base64" . CRLF;
$outAttachmentHeader .= "Content-Disposition: attachment;" . CRLF;
$outAttachmentHeader .= ' filename="'.basename($inFileLocation). '"' . CRLF . CRLF;
$file_size = filesize($inFileLocation);
$handle = fopen($inFileLocation, "r");
$content = fread($handle, $file_size);
fclose($handle);
$content = chunk_split(base64_encode($content));
$outAttachmentHeader .= $content . CRLF . CRLF;
}
return $outAttachmentHeader;
}
function send(){
$mailHeader = "";
if($this->mailCC != "")
$mailHeader .= "CC: " . $this->mailCC . CRLF;
if($this->mailBCC != "")
$mailHeader .= "BCC: " . $this->mailBCC . CRLF;
if($this->mailFrom != "")
$mailHeader .= "FROM: " . $this->mailFrom . CRLF;
if($this->mailAttachments == "") {
$mailHeader .= "MIME-Version: 1.0" . CRLF;;
$mailHeader .= "Content-Type: multipart/alternative;" . CRLF;
$mailHeader .= ' boundary="'.$this->bodyBoundary.'"';
$mailbody .= "--" . $this->bodyBoundary . CRLF;
if($this->mailHTML == "") {
$textBody = $this->formatTextBody();
$mailbody .= $textBody . CRLF;
}
else {
$htmlBody = $this->formatHTMLBody();
$mailbody .= $htmlBody . CRLF;
}
$mailbody .= "--" . $this->bodyBoundary . "--";
return mail($this->mailTo, $this->mailSubject, $mailbody, $mailHeader);
}
else {
$mailHeader .= "Content-Type: multipart/mixed;";
$mailHeader .= ' boundary="'.$this->bodyBoundary.'"';
$mailbody .= "--" . $this->bodyBoundary . CRLF;
if($this->mailHTML == "") {
$textBody = $this->formatTextBody();
$mailbody .= $textBody . CRLF;
}
else {
$htmlBody = $this->formatHTMLBody();
$mailbody .= $htmlBody . CRLF;
}
$attachmentArray = explode(",", $this->mailAttachments);
for($i=0; $i<count($attachmentArray); $i++){
$mailbody .= "--".$this->bodyBoundary . CRLF;
$mailbody .= $this->formatAttachmentHeader($attachmentArray[$i]);
}
$mailbody .= "--".$this->bodyBoundary."--";
return mail($this->mailTo, $this->mailSubject, $mailbody, $mailHeader);
}
return false;
}
}
?>