Friday, May 13, 2011
PHP Mail Class
/**
*
* @usage:
*
* Email::getInstance()->setEmailTo('you@email.com');
* Email::getInstance()->setEmailFrom('me@email.com');
* Email::getInstance()->setEmailFromName('My Name');
* Email::getInstance()->setEmailReplyTo('replyToMe@email.com');
* Email::getInstance()->setEmailCc('ccMe@email.com');
* Email::getInstance()->setEmailBcc('bccMe@email.com');
* Email::getInstance()->setEmailSubject('Subject');
* Email::getInstance()->setEmailMessage('Message');
* Email::getInstance()->setEmailMessageWithHtml('HTML Message');
* Email::getInstance()->setEmailAttachment('attachment.txt');
*
* echo Email::getInstance()->sendEmail(); // will start a new instance when sending the email
*/
class Email {
private $emailTo;
private $emailFrom;
private $emailFromName;
private $emailCc;
private $emailBcc;
private $emailReplyTo;
private $emailSubject;
private $emailMessage;
private $emailMessageWithHtml;
private $emailHeader;
private $emailAttachment;
private $emailAttachmentFileName;
private $emailAttachmentMimeType;
private static $instance = null;
/**
* Constructor
*
* @param
* @return
*/
public function __construct() {
$this->emailTo = '';
$this->emailFrom = '';
$this->emailFromName = '';
$this->emailCc = '';
$this->emailBcc = '';
$this->emailReplyTo = '';
$this->emailSubject = '';
$this->emailMessage = '';
$this->emailMessageWithHtml = '';
$this->emailHeader = '';
$this->emailAttachment = '';
$this->emailAttachmentFileName = '';
$this->emailAttachmentMimeType = '';
}
/**
* Get Instance
*
* @param
* @return object
*/
public static function getInstance() {
if(!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
/**
* New Instance
*
* @param
* @return object
*/
private static function newInstance() {
if(isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
/**
* Send Email
*
* @param
* @return string
*/
public function sendEmail() {
$emailStatusMessage = "";
if($this->emailFromName() != '') {
$this->setEmailHeader($this->emailHeader()."From: ".$this->emailFromName()." <".$this->emailFrom().">\r\n");
} else {
$this->setEmailHeader($this->emailHeader()."From: ".$this->emailFrom()." \r\n");
}
if($this->emailReplyTo() != '') {
$emailStatusMessage .= " Reply-To: ".$this->emailReplyTo();
$this->setEmailHeader($this->emailHeader()."Reply-To: ".$this->emailReplyTo()." \r\n");
}
if($this->emailCc() != '') {
$emailStatusMessage .= " cc: ".$this->emailCc();
$this->setEmailHeader($this->emailHeader()." Cc: ".$this->emailCc()." \r\n");
}
if($this->emailBcc() != '') {
$emailStatusMessage .= " bcc: ".$this->emailBcc();
$this->setEmailHeader($this->emailHeader()." BCC: ".$this->emailBcc()." \r\n");
}
if($this->emailMessageWithHtml() !='' || $this->emailAttachment() != '') {
$this->setEmailHeader($this->emailHeader()."MIME-Version: = 1.0\r\n");
}
if($this->emailAttachment() != '') {
$fileName = empty($this->emailAttachmentFileName) ? basename($this->emailAttachment) : $this->emailAttachmentFileName;
$path = dirname($this->emailAttachment);
$file = $path.'/'.$fileName;
$fileSize = filesize($file);
$handle = fopen($file,"r");
$content = fread($handle, $fileSize);
fclose($handle);
$content = chunk_split(base64_encode($content));
$uid = md5(uniqid(time()));
$name = basename($file);
$mimeType = $this->mimeType($file);
if($mimeType == '') {
$returnEmailStatusMessage = "Email Notification was NOT sent as the MIME TYPE was not found for the file: '".$file."' for this email to: ".$this->emailTo()."".$emailStatusMessage;
$this->newInstance();
return $returnEmailStatusMessage;
}
$this->setEmailHeader($this->emailHeader()."Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n");
$this->setEmailHeader($this->emailHeader()."This is a multi-part message in MIME format.\r\n");
$this->setEmailHeader($this->emailHeader()."--".$uid."\r\n");
if($this->emailMessageWithHtml() != '') {
$emailStatusMessage .= ", Email is HTML";
$this->setEmailHeader($this->emailHeader()."Content-type:text/html;charset=iso-8859-1\r\n");
} else {
$this->setEmailHeader($this->emailHeader()."Content-type:text/plain; charset=iso-8859-1\r\n");
}
$this->setEmailHeader($this->emailHeader()."Content-Transfer-Encoding: 7bit\r\n\r\n");
$this->setEmailHeader($this->emailHeader().$this->emailMessage()."\r\n\r\n");
$this->setEmailHeader($this->emailHeader()."--".$uid."\r\n");
$this->setEmailHeader($this->emailHeader()."Content-Type: ".$mimeType."; name=\"".$fileName."\"\r\n");
$this->setEmailHeader($this->emailHeader()."Content-Transfer-Encoding: base64\r\n");
$this->setEmailHeader($this->emailHeader()."Content-Disposition: attachment; filename=\"".$fileName."\"\r\n\r\n");
$this->setEmailHeader($this->emailHeader().$content."\r\n\r\n");
$this->setEmailHeader($this->emailHeader()."--".$uid."--");
$emailStatusMessage .= ", Email has attachment: ".$fileName;
$this->setEmailMessage("");
} elseif($this->emailMessageWithHtml() != '') {
$emailStatusMessage .= ", Email is HTML";
$this->setEmailHeader($this->emailHeader()."Content-type:text/html;charset=iso-8859-1\r\n");
}
try {
mail(
$this->emailTo(),
$this->emailSubject(),
$this->emailMessage(),
$this->emailHeader()
);
$returnEmailStatusMessage = "Email Notification was successfully sent to: ".$this->emailTo()."".$emailStatusMessage;
$this->newInstance();
return $returnEmailStatusMessage;
} catch (Exception $e) {
$returnEmailStatusMessage = "ERROR: Email Notification was not sent to: ".$this->emailTo()."".$emailStatusMessage." Caught exception: ".$e->getMessage();
$this->newInstance();
return $returnEmailStatusMessage;
}
}
/**
* Set Email Attachment Mime Type
*
* @param string
* @return
*/
public function setEmailAttachmentMimeType($emailAttachmentMimeType) {
$this->emailAttachmentMimeType = $emailAttachmentMimeType;
}
/**
* Email Attachment Mime Type
*
* @param
* @return string
*/
public function emailAttachmentMimeType() {
return $this->emailAttachmentMimeType;
}
/**
* Set Email Attachment File Name
*
* @param string
* @return
*/
public function setEmailAttachmentFileName($emailAttachmentFileName) {
$this->emailAttachmentFileName = $emailAttachmentFileName;
}
/**
* Email Attachment File Name
*
* @param
* @return string
*/
public function emailAttachmentFileName() {
return $this->emailAttachmentFileName;
}
/**
* Set Email Attacchment
*
* @param string
* @return
*/
public function setEmailAttachment($emailAttachment) {
$this->emailAttachment = $emailAttachment;
}
/**
* Email Attachment
*
* @param
* @return string
*/
public function emailAttachment() {
return $this->emailAttachment;
}
/**
* Set Email To
*
* @param string
* @return
*/
public function setEmailTo($emailTo) {
$this->emailTo = $emailTo;
}
/**
* Email To
*
* @param
* @return string
*/
public function emailTo() {
return $this->emailTo;
}
/**
* Set Email From
*
* @param string
* @return
*/
public function setEmailFrom($emailFrom) {
$this->emailFrom = $emailFrom;
}
/**
* Email From
*
* @param
* @return string
*/
public function emailFrom() {
return $this->emailFrom;
}
/**
* Set Email From Name
*
* @param string
* @return
*/
public function setEmailFromName($emailFromName) {
$this->emailFromName = $emailFromName;
}
/**
* Email From Name
*
* @param
* @return string
*/
public function emailFromName() {
return $this->emailFromName;
}
/**
* Set Email Reply To
*
* @param string
* @return
*/
public function setEmailReplyTo($emailReplyTo) {
$this->emailReplyTo = $emailReplyTo;
}
/**Email Reply To
*
*
* @param
* @return string
*/
public function emailReplyTo() {
return $this->emailReplyTo;
}
/**
* Set Email CC
*
* @param string
* @return
*/
public function setEmailCc($emailCc) {
$this->emailCc = $emailCc;
}
/**
* Email CC
*
* @param
* @return string
*/
public function emailCc() {
return $this->emailCc;
}
/**
* Set Email BCC
*
* @param string
* @return
*/
public function setEmailBcc($emailBcc) {
$this->emailBcc = $emailBcc;
}
/**
* Email BCC
*
* @param
* @return string
*/
public function emailBcc() {
return $this->emailBcc;
}
/**
* Set Email Subject
*
* @param string
* @return
*/
public function setEmailSubject($emailSubject) {
$this->emailSubject = $emailSubject;
}
/**
* Email Subject
*
* @param
* @return string
*/
public function emailSubject() {
return $this->emailSubject;
}
/**
* Set Email Message
*
* @param string
* @return
*/
public function setEmailMessage($emailMessage) {
$this->emailMessage = $emailMessage;
}
/**
* Email Message
*
* @param
* @return string
*/
public function emailMessage() {
if(is_array($this->emailMessage)) {
return implode("\n\r", $this->emailMessage);
}
return $this->emailMessage;
}
/**
* Set Email Message With HTML
*
* @param string
* @return
*/
public function setEmailMessageWithHtml($emailMessageWithHtml) {
$this->emailMessageWithHtml = $emailMessageWithHtml;
$this->setEmailMessage($emailMessageWithHtml);
}
/**
* Email Message With HTML
*
* @param
* @return string
*/
public function emailMessageWithHtml() {
return $this->emailMessageWithHtml;
}
/**
* Set Email Header
*
* @param string
* @return
*/
public function setEmailHeader($emailHeader) {
$this->emailHeader = $emailHeader;
}
/**
* Email Header
*
* @param
* @return string
*/
public function emailHeader() {
return $this->emailHeader;
}
/**
* Mime Type
*
* @param string
* @return string
*/
public function mimeType($file) {
$mimeTypes = array(
"323" => "text/h323",
"acx" => "application/internet-property-stream",
"ai" => "application/postscript",
"aif" => "audio/x-aiff",
"aifc" => "audio/x-aiff",
"aiff" => "audio/x-aiff",
"asf" => "video/x-ms-asf",
"asr" => "video/x-ms-asf",
"asx" => "video/x-ms-asf",
"au" => "audio/basic",
"avi" => "video/x-msvideo",
"axs" => "application/olescript",
"bas" => "text/plain",
"bcpio" => "application/x-bcpio",
"bin" => "application/octet-stream",
"bmp" => "image/bmp",
"c" => "text/plain",
"cat" => "application/vnd.ms-pkiseccat",
"cdf" => "application/x-cdf",
"cer" => "application/x-x509-ca-cert",
"class" => "application/octet-stream",
"clp" => "application/x-msclip",
"cmx" => "image/x-cmx",
"cod" => "image/cis-cod",
"cpio" => "application/x-cpio",
"crd" => "application/x-mscardfile",
"crl" => "application/pkix-crl",
"crt" => "application/x-x509-ca-cert",
"csh" => "application/x-csh",
"css" => "text/css",
"dcr" => "application/x-director",
"der" => "application/x-x509-ca-cert",
"dir" => "application/x-director",
"dll" => "application/x-msdownload",
"dms" => "application/octet-stream",
"doc" => "application/msword",
"dot" => "application/msword",
"dvi" => "application/x-dvi",
"dxr" => "application/x-director",
"eps" => "application/postscript",
"etx" => "text/x-setext",
"evy" => "application/envoy",
"exe" => "application/octet-stream",
"fif" => "application/fractals",
"flr" => "x-world/x-vrml",
"gif" => "image/gif",
"gtar" => "application/x-gtar",
"gz" => "application/x-gzip",
"h" => "text/plain",
"hdf" => "application/x-hdf",
"hlp" => "application/winhlp",
"hqx" => "application/mac-binhex40",
"hta" => "application/hta",
"htc" => "text/x-component",
"htm" => "text/html",
"html" => "text/html",
"htt" => "text/webviewhtml",
"ico" => "image/x-icon",
"ief" => "image/ief",
"iii" => "application/x-iphone",
"ins" => "application/x-internet-signup",
"isp" => "application/x-internet-signup",
"jfif" => "image/pipeg",
"jpe" => "image/jpeg",
"jpeg" => "image/jpeg",
"jpg" => "image/jpeg",
"js" => "application/x-javascript",
"latex" => "application/x-latex",
"lha" => "application/octet-stream",
"log" => "text/plain",
"lsf" => "video/x-la-asf",
"lsx" => "video/x-la-asf",
"lzh" => "application/octet-stream",
"m13" => "application/x-msmediaview",
"m14" => "application/x-msmediaview",
"m3u" => "audio/x-mpegurl",
"man" => "application/x-troff-man",
"mdb" => "application/x-msaccess",
"me" => "application/x-troff-me",
"mht" => "message/rfc822",
"mhtml" => "message/rfc822",
"mid" => "audio/mid",
"mny" => "application/x-msmoney",
"mov" => "video/quicktime",
"movie" => "video/x-sgi-movie",
"mp2" => "video/mpeg",
"mp3" => "audio/mpeg",
"mpa" => "video/mpeg",
"mpe" => "video/mpeg",
"mpeg" => "video/mpeg",
"mpg" => "video/mpeg",
"mpp" => "application/vnd.ms-project",
"mpv2" => "video/mpeg",
"ms" => "application/x-troff-ms",
"mvb" => "application/x-msmediaview",
"nws" => "message/rfc822",
"oda" => "application/oda",
"p10" => "application/pkcs10",
"p12" => "application/x-pkcs12",
"p7b" => "application/x-pkcs7-certificates",
"p7c" => "application/x-pkcs7-mime",
"p7m" => "application/x-pkcs7-mime",
"p7r" => "application/x-pkcs7-certreqresp",
"p7s" => "application/x-pkcs7-signature",
"pbm" => "image/x-portable-bitmap",
"pdf" => "application/pdf",
"pfx" => "application/x-pkcs12",
"pgm" => "image/x-portable-graymap",
"pko" => "application/ynd.ms-pkipko",
"pma" => "application/x-perfmon",
"pmc" => "application/x-perfmon",
"pml" => "application/x-perfmon",
"pmr" => "application/x-perfmon",
"pmw" => "application/x-perfmon",
"pnm" => "image/x-portable-anymap",
"pot" => "application/vnd.ms-powerpoint",
"ppm" => "image/x-portable-pixmap",
"pps" => "application/vnd.ms-powerpoint",
"ppt" => "application/vnd.ms-powerpoint",
"prf" => "application/pics-rules",
"ps" => "application/postscript",
"pub" => "application/x-mspublisher",
"qt" => "video/quicktime",
"ra" => "audio/x-pn-realaudio",
"ram" => "audio/x-pn-realaudio",
"ras" => "image/x-cmu-raster",
"rgb" => "image/x-rgb",
"rmi" => "audio/mid",
"roff" => "application/x-troff",
"rtf" => "application/rtf",
"rtx" => "text/richtext",
"scd" => "application/x-msschedule",
"sct" => "text/scriptlet",
"setpay" => "application/set-payment-initiation",
"setreg" => "application/set-registration-initiation",
"sh" => "application/x-sh",
"shar" => "application/x-shar",
"sit" => "application/x-stuffit",
"snd" => "audio/basic",
"spc" => "application/x-pkcs7-certificates",
"spl" => "application/futuresplash",
"src" => "application/x-wais-source",
"sst" => "application/vnd.ms-pkicertstore",
"stl" => "application/vnd.ms-pkistl",
"stm" => "text/html",
"svg" => "image/svg+xml",
"sv4cpio" => "application/x-sv4cpio",
"sv4crc" => "application/x-sv4crc",
"t" => "application/x-troff",
"tar" => "application/x-tar",
"tcl" => "application/x-tcl",
"tex" => "application/x-tex",
"texi" => "application/x-texinfo",
"texinfo" => "application/x-texinfo",
"tgz" => "application/x-compressed",
"tif" => "image/tiff",
"tiff" => "image/tiff",
"tr" => "application/x-troff",
"trm" => "application/x-msterminal",
"tsv" => "text/tab-separated-values",
"txt" => "text/plain",
"uls" => "text/iuls",
"ustar" => "application/x-ustar",
"vcf" => "text/x-vcard",
"vrml" => "x-world/x-vrml",
"wav" => "audio/x-wav",
"wcm" => "application/vnd.ms-works",
"wdb" => "application/vnd.ms-works",
"wks" => "application/vnd.ms-works",
"wmf" => "application/x-msmetafile",
"wps" => "application/vnd.ms-works",
"wri" => "application/x-mswrite",
"wrl" => "x-world/x-vrml",
"wrz" => "x-world/x-vrml",
"xaf" => "x-world/x-vrml",
"xbm" => "image/x-xbitmap",
"xla" => "application/vnd.ms-excel",
"xlc" => "application/vnd.ms-excel",
"xlm" => "application/vnd.ms-excel",
"xls" => "application/vnd.ms-excel",
"xlsx" => "vnd.ms-excel",
"xlt" => "application/vnd.ms-excel",
"xlw" => "application/vnd.ms-excel",
"xof" => "x-world/x-vrml",
"xpm" => "image/x-xpixmap",
"xwd" => "image/x-xwindowdump",
"z" => "application/x-compress",
"zip" => "application/zip"
);
$extension = end(explode('.', $file));
return $mimeTypes[$extension];
}
}
?>
Subscribe to:
Post Comments (Atom)
2 comments:
Hi Phil,
I have a problem with your email class. I am sending a email with a pdf attachment.
When I receiced this message, I can't open the pdf, outlook is telling me that the pdf is damaged or wrongly mime typed.
Please advice.....
Is the PDF corrupt?
Post a Comment