推荐个功能齐全的发送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 操作excel文件的方法小结
Dec 31 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
Nov 01 PHP
PHP生成随机用户名和密码的实现代码
Feb 27 PHP
深入PHP运行环境配置的详解
Jun 04 PHP
Laravel 5框架学习之Eloquent 关系
Apr 09 PHP
php中使用gd库实现下载网页中所有图片
May 12 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
PHP中include()与require()的区别说明
Feb 14 PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
PHP实现百度人脸识别
May 06 PHP
Laravel框架验证码类用法实例分析
Sep 11 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 文件缓存的性能测试
2010/04/25 PHP
php 类自动载入的方法
2015/06/03 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
jquery 学习之一 对象访问
2010/11/23 Javascript
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
2017/09/25 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
vuex入门最详细整理
2020/03/04 Javascript
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
Python减少循环层次和缩进的技巧分析
2016/03/15 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
读群众路线心得体会
2014/03/07 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
关于安全演讲稿
2014/05/09 职场文书
环保小标语
2014/06/13 职场文书
售房委托书
2014/08/30 职场文书
九寨沟导游词
2015/02/02 职场文书
节约用电通知
2015/04/25 职场文书