推荐个功能齐全的发送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 相关文章推荐
一个odbc连mssql分页的类
Oct 09 PHP
PHP gbk环境下json_dencode传送来的汉字
Nov 13 PHP
浅析PHP绘图技术
Jul 03 PHP
php数组中包含中文的排序方法
Jun 03 PHP
php输出指定时间以前时间格式的方法
Mar 21 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
PHP中的多种加密技术及代码示例解析
Oct 20 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 PHP
PHP常用函数之base64图片上传功能详解
Oct 21 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
May 02 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的ob_start();控制您的浏览器cache!
2007/02/14 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
jquery 插件开发备注
2010/08/27 Javascript
Jquery事件的连接使用示例
2013/06/18 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
微信小程序 获取设备信息 API实例详解
2016/10/02 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
[01:38:19]夜魇凡尔赛茶话会 第五期
2021/03/11 DOTA
python实现bitmap数据结构详解
2014/02/17 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
python求质数的3种方法
2018/09/28 Python
python实现自动登录后台管理系统
2018/10/18 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
python调用其他文件函数或类的示例
2019/07/16 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
三八妇女节标语
2014/10/09 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android
MySQL数据库查询之多表查询总结
2022/08/05 MySQL