推荐个功能齐全的发送PHP邮件类


Posted in PHP onJanuary 03, 2007

PHP--下面这个类的功能则很强大,不但能发html格式的邮件,还可以发附件
使用方法:

<?    
Include “email.class”    $mail->setTo("a@a.com"); //收件人    
$mail-> setCC("b@b.com,c@c.com"); //抄送    
$mail-> setCC("d@b.com,e@c.com"); //秘密抄送    
$mail->setFrom(“f@f.com”);//发件人    
$mail->setSubject(“主题”) ; //主题    
$mail->setText(“文本格式”) ;//发送文本格式也可以是变量    
$mail->setHTML(“html格式”) ;//发送html格式也可以是变量    
$mail->setAttachments(“c:a.jpg”) ;//添加附件,需表明路径    
$mail->send(); //发送邮件    
?> 

<?php    
class Email {    
//---设置全局变量    
var $mailTo = ""; // 收件人    
var $mailCC = ""; // 抄送    
var $mailBCC = ""; // 秘密抄送    
var $mailFrom = ""; // 发件人    
var $mailSubject = ""; // 主题    
var $mailText = ""; // 文本格式的信件主体    
var $mailHTML = ""; // html格式的信件主体    
var $mailAttachments = ""; // 附件    
/* 函数setTo($inAddress) :用于处理邮件的地址 参数 $inAddress    
为包涵一个或多个字串,email地址变量,使用逗号来分割多个邮件地址    
默认返回值为true    
**********************************************************/    
function setTo($inAddress){    
//--用explode()函数根据”,”对邮件地址进行分割    
$addressArray = explode( ",",$inAddress);    
//--通过循环对邮件地址的合法性进行检查    
for($i=0;$i<count($addressArray);$i++){ if($this->checkEmail($addressArray[$i])==false) return false; }    
//--所有合法的email地址存入数组中    
$this->mailTo = implode($addressArray, ",");    
return true; }    
/**************************************************    
函数 setCC($inAddress) 设置抄送人邮件地址    
参数 $inAddress 为包涵一个或多个邮件地址的字串,email地址变量,    
使用逗号来分割多个邮件地址 默认返回值为true    
**************************************************************/    
function setCC($inAddress){    
//--用explode()函数根据”,”对邮件地址进行分割    
$addressArray = explode( ",",$inAddress);    
//--通过循环对邮件地址的合法性进行检查    
for($i=0;$i<count($addressArray);$i++){ if($this->checkEmail($addressArray[$i])==false) return false; }    
//--所有合法的email地址存入数组中    
$this->mailCC = implode($addressArray, ",");    
return true; }    
/***************************************************    
函数setBCC($inAddress) 设置秘密抄送地址 参数 $inAddress 为包涵一个或多    
个邮件地址的字串,email地址变量,使用逗号来分割多个邮件地址 默认返回值为    
true    
******************************************/    
function setBCC($inAddress){    
//--用explode()函数根据”,”对邮件地址进行分割    
$addressArray = explode( ",",$inAddress);    
//--通过循环对邮件地址的合法性进行检查    
for($i=0;$i<count($addressArray);$i++)    
{ if($this->checkEmail($addressArray[$i])==false)    
return false;    
}    
//--所有合法的email地址存入数组中    
$this->mailBCC = implode($addressArray, ",");    
return true;    
}    
/*****************************************************************    
函数setFrom($inAddress):设置发件人地址 参数 $inAddress 为包涵邮件    
地址的字串默认返回值为true    
***************************************/    
function setFrom($inAddress){    
if($this->checkEmail($inAddress)){    
$this->mailFrom = $inAddress;    
return true;    
} return false; }    
/**********************    
函数 setSubject($inSubject) 用于设置邮件主题参数$inSubject为字串,    
默认返回的是true    
*******************************************/    
function setSubject($inSubject){    
if(strlen(trim($inSubject)) > 0){    
$this->mailSubject = ereg_replace( "n", "",$inSubject);    
return true; }    
return false; }    
/****************************************************    
函数setText($inText) 设置文本格式的邮件主体参数 $inText 为文本内容默    
认返回值为true    
****************************************/    
function setText($inText){    
if(strlen(trim($inText)) > 0){    
$this->mailText = $inText;    
return true; }    
return false;    
}    
/**********************************    
函数setHTML($inHTML) 设置html格式的邮件主体参数$inHTML为html格式,    
默认返回值为true    
************************************/    
function setHTML($inHTML){    
if(strlen(trim($inHTML)) > 0){    
$this->mailHTML = $inHTML;    
return true; }    
return false; }    
/**********************    
函数 setAttachments($inAttachments) 设置邮件的附件 参数$inAttachments    
为一个包涵目录的字串,也可以包涵多个文件用逗号进行分割 默认返回值为true    
*******************************************/    
function setAttachments($inAttachments){    
if(strlen(trim($inAttachments)) > 0){    
$this->mailAttachments = $inAttachments;    
return true; }    
return false; }    
/*********************************    
函数 checkEmail($inAddress) :这个函数我们前面已经调用过了,主要就是    
用于检查email地址的合法性    
*****************************************/    
function checkEmail($inAddress){    
return (ereg( "^[^@ ]+@([a-zA-Z0-9-]+.)+([a-zA-Z0-9-]{2}|net|com|gov|mil|org|edu|int)$",$inAddress));    
}    
/*************************************************    
函数loadTemplate($inFileLocation,$inHash,$inFormat) 读取临时文件并且    
替换无用的信息参数$inFileLocation用于定位文件的目录    
$inHash 由于存储临时的值 $inFormat 由于放置邮件主体    
***********************************************************/    
function loadTemplate($inFileLocation,$inHash,$inFormat){    
/* 比如邮件内有如下内容: Dear ~!UserName~,    
Your address is ~!UserAddress~ */    
//--其中”~!”为起始标志”~”为结束标志    
$templateDelim = "~";    
$templateNameStart = "!";    
//--找出这些地方并把他们替换掉    
$templateLineOut = ""; //--打开临时文件    
if($templateFile = fopen($inFileLocation, "r")){    
while(!feof($templateFile)){    
$templateLine = fgets($templateFile,1000);    
$templateLineArray = explode($templateDelim,$templateLine);    
for( $i=0; $i<count($templateLineArray);$i++){    
//--寻找起始位置    
if(strcspn($templateLineArray[$i],$templateNameStart)==0){    
//--替换相应的值    
$hashName = substr($templateLineArray[$i],1);    
//--替换相应的值    
$templateLineArray[$i] = ereg_replace($hashName,(string)$inHash[$hashName],$hashName);    
}    
}    
//--输出字符数组并叠加    
$templateLineOut .= implode($templateLineArray, "");    
} //--关闭文件fclose($templateFile);    
//--设置主体格式(文本或html)    
if( strtoupper($inFormat)== "TEXT" )    
return($this->setText($templateLineOut));    
else if( strtoupper($inFormat)== "HTML" )    
return($this->setHTML($templateLineOut));    
} return false;    
}    
/*****************************************    
函数 getRandomBoundary($offset) 返回一个随机的边界值    
参数 $offset 为整数 ? 用于多管道的调用 返回一个md5()编码的字串    
****************************************/    
function getRandomBoundary($offset = 0){    
//--随机数生成    
srand(time()+$offset);    
//--返回 md5 编码的32位 字符长度的字串    
return ( "----".(md5(rand()))); }    
/********************************************    
函数: getContentType($inFileName)用于判断附件的类型    
**********************************************/    
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";    
default: return "application/octet-stream";    
}    
return "application/octet-stream";    
}    
/**********************************************    
函数formatTextHeader把文本内容加上text的文件头    
*****************************************************/    
function formatTextHeader(){ $outTextHeader = "";    
$outTextHeader .= "Content-Type: text/plain;    
charset=us-asciin";    
$outTextHeader .= "Content-Transfer-Encoding: 7bitnn";    
$outTextHeader .= $this->mailText. "n";    
return $outTextHeader;    
} /************************************************    
函数formatHTMLHeader()把邮件主体内容加上html的文件头    
******************************************/    
function formatHTMLHeader(){    
$outHTMLHeader = "";    
$outHTMLHeader .= "Content-Type: text/html;    
charset=us-asciin";    
$outHTMLHeader .= "Content-Transfer-Encoding: 7bitnn";    
$outHTMLHeader .= $this->mailHTML. "n";    
return $outHTMLHeader;    
}    
/**********************************    
函数 formatAttachmentHeader($inFileLocation) 把邮件中的附件标识出来    
********************************/    
function formatAttachmentHeader($inFileLocation){    
$outAttachmentHeader = "";    
//--用上面的函数getContentType($inFileLocation)得出附件类型    
$contentType = $this->getContentType($inFileLocation);    
//--如果附件是文本型则用标准的7位编码    
if(ereg( "text",$contentType)){    
$outAttachmentHeader .= "Content-Type: ".$contentType. ";n";    
$outAttachmentHeader .= ' name="'.basename($inFileLocation). '"'. "n";    
$outAttachmentHeader .= "Content-Transfer-Encoding: 7bitn";    
$outAttachmentHeader .= "Content-Disposition: attachment;n";    
$outAttachmentHeader .= ' filename="'.basename($inFileLocation). '"'. "nn";    
$textFile = fopen($inFileLocation, "r");    
while(!feof($textFile)){    
$outAttachmentHeader .= fgets($textFile,1000);    
}    
//--关闭文件 fclose($textFile);    
$outAttachmentHeader .= "n";    
}    
//--非文本格式则用64位进行编码    
else{ $outAttachmentHeader .= "Content-Type: ".$contentType. ";n";    
$outAttachmentHeader .= ' name="'.basename($inFileLocation). '"'. "n";    
$outAttachmentHeader .= "Content-Transfer-Encoding: base64n";    
$outAttachmentHeader .= "Content-Disposition: attachment;n";    
$outAttachmentHeader .= ' filename="'.basename($inFileLocation). '"'. "nn";    
//--调用外部命令uuencode进行编码    
exec( "uuencode -m $inFileLocation nothing_out",$returnArray);    
for ($i = 1; $i<(count($returnArray)); $i++){    
$outAttachmentHeader .= $returnArray[$i]. "n";    
}    
} return $outAttachmentHeader;    
}    
/******************************    
函数 send()用于发送邮件,发送成功返回值为true    
************************************/    
function send(){    
//--设置邮件头为空    
$mailHeader = "";    
//--添加抄送人    
if($this->mailCC != "")    
$mailHeader .= "CC: ".$this->mailCC. "n";    
//--添加秘密抄送人    
if($this->mailBCC != "")    
$mailHeader .= "BCC: ".$this->mailBCC. "n";    
//--添加发件人    
if($this->mailFrom != "")    
$mailHeader .= "FROM: ".$this->mailFrom. "n";    
//---------------------------邮件格式------------------------------    
//--文本格式    
if($this->mailText != "" && $this->mailHTML == "" && $this->mailAttachments == ""){    
return mail($this->mailTo,$this->mailSubject,$this->mailText,$mailHeader);    
}    
//--html或text格式    
else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments == ""){    
$bodyBoundary = $this->getRandomBoundary();    
$textHeader = $this->formatTextHeader();    
$htmlHeader = $this->formatHTMLHeader();    
//--设置 MIME-版本    
$mailHeader .= "MIME-Version: 1.0n";    
$mailHeader .= "Content-Type: multipart/alternative;n";    
$mailHeader .= ' boundary="'.$bodyBoundary. '"';    
$mailHeader .= "nnn";    
//--添加邮件主体和边界    
$mailHeader .= "--".$bodyBoundary. "n";    
$mailHeader .= $textHeader;    
$mailHeader .= "--".$bodyBoundary. "n";    
//--添加html标签    
$mailHeader .= $htmlHeader;    
$mailHeader .= "n--".$bodyBoundary. "--";    
//--发送邮件    
return mail($this->mailTo,$this->mailSubject, "",$mailHeader);    
}    
//--文本加html加附件    
else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments != ""){    
$attachmentBoundary = $this->getRandomBoundary();    
$mailHeader .= "Content-Type: multipart/mixed;n";    
$mailHeader .= ' boundary="'.$attachmentBoundary. '"'. "nn";    
$mailHeader .= "This is a multi-part message in MIME format.n";    
$mailHeader .= "--".$attachmentBoundary. "n";    
$bodyBoundary = $this->getRandomBoundary(1);    
$textHeader = $this->formatTextHeader();    
$htmlHeader = $this->formatHTMLHeader();    
$mailHeader .= "MIME-Version: 1.0n";    
$mailHeader .= "Content-Type: multipart/alternative;n";    
$mailHeader .= ' boundary="'.$bodyBoundary. '"';    
$mailHeader .= "nnn";    
$mailHeader .= "--".$bodyBoundary. "n";    
$mailHeader .= $textHeader;    
$mailHeader .= "--".$bodyBoundary. "n";    
$mailHeader .= $htmlHeader;    
$mailHeader .= "n--".$bodyBoundary. "--";    
//--获取附件值    
$attachmentArray = explode( ",",$this->mailAttachments);    
//--根据附件的个数进行循环    
for($i=0;$i<count($attachmentArray);$i++){    
//--分割 $mailHeader .= "n--".$attachmentBoundary. "n";    
//--附件信息    
$mailHeader .= $this->formatAttachmentHeader($attachmentArray[$i]);    
}    
$mailHeader .= "--".$attachmentBoundary. "--";    
return mail($this->mailTo,$this->mailSubject, "",$mailHeader);    
}    
return false;    
}    
}    
?>
PHP 相关文章推荐
高亮度显示php源代码
Oct 09 PHP
综合图片计数器
Oct 09 PHP
如何将数据从文本导入到mysql
Oct 09 PHP
PHP Directory 函数的详解
Mar 07 PHP
解决Codeigniter不能上传rar和zip压缩包问题
Mar 07 PHP
smarty模板局部缓存方法使用示例
Jun 17 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
Aug 19 PHP
浅析php创建者模式
Nov 25 PHP
PHP实现懒加载的方法
Mar 07 PHP
php验证码实现代码(3种)
Sep 07 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
Mar 13 PHP
PHP耦合设计模式实例分析
Aug 08 PHP
php和js交互一例-PHP教程,PHP应用
Jan 03 #PHP
URL Rewrite的设置方法
Jan 02 #PHP
DISCUZ 分页代码
Jan 02 #PHP
帖几个PHP的无限分类实现想法~
Jan 02 #PHP
PHP+MYSQL开发工具及资源收藏
Jan 02 #PHP
分享PHP入门的学习方法
Jan 02 #PHP
php中常用编辑器推荐
Jan 02 #PHP
You might like
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
实现vuex原理的示例
2020/10/21 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
python for循环remove同一个list过程解析
2019/08/14 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
wxPython实现文本框基础组件
2019/11/18 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
铅球加油稿100字
2014/09/26 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
2015年党员承诺书
2015/01/21 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
重温入党誓词主持词
2015/06/29 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
你真的会用Mysql的explain吗
2022/03/31 MySQL