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

2018-09-07 12:05

阅读:394

  PHP--下面这个类的功能则很强大,不但能发html格式的邮件,还可以发附件
使用方法:
复制代码 代码如下:<?
Include“email.class”

$mail->setCC(,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
classEmail{
//---设置全局变量
var$mailTo=;//收件人
var$mailCC=;//抄送
var$mailBCC=;//秘密抄送
var$mailFrom=;//发件人
var$mailSubject=;//主题
var$mailText=;//文本格式的信件主体
var$mailHTML=;//html格式的信件主体
var$mailAttachments=;//附件
/*函数setTo($inAddress):用于处理邮件的地址参数$inAddress
为包涵一个或多个字串,email地址变量,使用逗号来分割多个邮件地址
默认返回值为true
**********************************************************/
functionsetTo($inAddress){
//--用explode()函数根据”,”对邮件地址进行分割
$addressArray=explode(,,$inAddress);
//--通过循环对邮件地址的合法性进行检查
for($i=0;$i<count($addressArray);$i++){if($this->checkEmail($addressArray[$i])==false)returnfalse;}
//--所有合法的email地址存入数组中
$this->mailTo=implode($addressArray,,);
returntrue;}
/**************************************************
函数setCC($inAddress)设置抄送人邮件地址
参数$inAddress为包涵一个或多个邮件地址的字串,email地址变量,
使用逗号来分割多个邮件地址默认返回值为true
**************************************************************/
functionsetCC($inAddress){
//--用explode()函数根据”,”对邮件地址进行分割
$addressArray=explode(,,$inAddress);
//--通过循环对邮件地址的合法性进行检查
for($i=0;$i<count($addressArray);$i++){if($this->checkEmail($addressArray[$i])==false)returnfalse;}
//--所有合法的email地址存入数组中
$this->mailCC=implode($addressArray,,);
returntrue;}
/***************************************************
函数setBCC($inAddress)设置秘密抄送地址参数$inAddress为包涵一个或多
个邮件地址的字串,email地址变量,使用逗号来分割多个邮件地址默认返回值为
true
******************************************/
functionsetBCC($inAddress){
//--用explode()函数根据”,”对邮件地址进行分割
$addressArray=explode(,,$inAddress);
//--通过循环对邮件地址的合法性进行检查
for($i=0;$i<count($addressArray);$i++)
{if($this->checkEmail($addressArray[$i])==false)
returnfalse;
}
//--所有合法的email地址存入数组中
$this->mailBCC=implode($addressArray,,);
returntrue;
}
/*****************************************************************
函数setFrom($inAddress):设置发件人地址参数$inAddress为包涵邮件
地址的字串默认返回值为true
***************************************/
functionsetFrom($inAddress){
if($this->checkEmail($inAddress)){
$this->mailFrom=$inAddress;
returntrue;
}returnfalse;}
/**********************
函数setSubject($inSubject)用于设置邮件主题参数$inSubject为字串,
默认返回的是true
*******************************************/
functionsetSubject($inSubject){
if(strlen(trim($inSubject))>0){
$this->mailSubject=ereg_replace(n,,$inSubject);
returntrue;}
returnfalse;}
/****************************************************
函数setText($inText)设置文本格式的邮件主体参数$inText为文本内容默
认返回值为true
****************************************/
functionsetText($inText){
if(strlen(trim($inText))>0){
$this->mailText=$inText;
returntrue;}
returnfalse;
}
/**********************************
函数setHTML($inHTML)设置html格式的邮件主体参数$inHTML为html格式,
默认返回值为true
************************************/
functionsetHTML($inHTML){
if(strlen(trim($inHTML))>0){
$this->mailHTML=$inHTML;
returntrue;}
returnfalse;}
/**********************
函数setAttachments($inAttachments)设置邮件的附件参数$inAttachments
为一个包涵目录的字串,也可以包涵多个文件用逗号进行分割默认返回值为true
*******************************************/
functionsetAttachments($inAttachments){
if(strlen(trim($inAttachments))>0){
$this->mailAttachments=$inAttachments;
returntrue;}
returnfalse;}
/*********************************
函数checkEmail($inAddress):这个函数我们前面已经调用过了,主要就是
用于检查email地址的合法性
*****************************************/
functioncheckEmail($inAddress){
return(ereg(^[^@]+@([a-zA-Z0-9-]+.)+([a-zA-Z0-9-]{2}netcomgovmilorgeduint)$,$inAddress));
}
/*************************************************
函数loadTemplate($inFileLocation,$inHash,$inFormat)读取临时文件并且
替换无用的信息参数$inFileLocation用于定位文件的目录
$inHash由于存储临时的值$inFormat由于放置邮件主体
***********************************************************/
functionloadTemplate($inFileLocation,$inHash,$inFormat){
/*比如邮件内有如下内容:Dear~!UserName~,
Youraddressis~!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));
elseif(strtoupper($inFormat)==HTML)
return($this->setHTML($templateLineOut));
}returnfalse;
}
/*****************************************
函数getRandomBoundary($offset)返回一个随机的边界值
参数$offset为整数–用于多管道的调用返回一个md5()编码的字串
****************************************/
functiongetRandomBoundary($offset=0){
//--随机数生成
srand(time()+$offset);
//--返回md5编码的32位字符长度的字串
return(----.(md5(rand())));}
/********************************************
函数:getContentType($inFileName)用于判断附件的类型
**********************************************/
functiongetContentType($inFileName){
//--去除路径
$inFileName=basename($inFileName);
//--去除没有扩展名的文件
if(strrchr($inFileName,.)==false){
returnapplication/octet-stream;
}
//--提区扩展名并进行判断
$extension=strrchr($inFileName,.);
switch($extension){
case.gif:returnimage/gif;
case.gz:returnapplication/x-gzip;
case.htm:returntext/html;
case.html:returntext/html;
case.jpg:returnimage/jpeg;
case.tar:returnapplication/x-tar;
case.txt:returntext/plain;
case.zip:returnapplication/zip;
default:returnapplication/octet-stream;
}
returnapplication/octet-stream;
}
/**********************************************
函数formatTextHeader把文本内容加上text的文件头
*****************************************************/
functionformatTextHeader(){$outTextHeader=;
$outTextHeader.=Content-Type:text/plain;
charset=us-asciin;
$outTextHeader.=Content-Transfer-Encoding:7bitnn;
$outTextHeader.=$this->mailText.n;
return$outTextHeader;
}/************************************************
函数formatHTMLHeader()把邮件主体内容加上html的文件头
******************************************/
functionformatHTMLHeader(){
$outHTMLHeader=;
$outHTMLHeader.=Content-Type:text/html;
charset=us-asciin;
$outHTMLHeader.=Content-Transfer-Encoding:7bitnn;
$outHTMLHeader.=$this->mailHTML.n;
return$outHTMLHeader;
}
/**********************************
函数formatAttachmentHeader($inFileLocation)把邮件中的附件标识出来
********************************/
functionformatAttachmentHeader($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$inFileLocationnothing_out,$returnArray);
for($i=1;$i<(count($returnArray));$i++){
$outAttachmentHeader.=$returnArray[$i].n;
}
}return$outAttachmentHeader;
}
/******************************
函数send()用于发送邮件,发送成功返回值为true
************************************/
functionsend(){
//--设置邮件头为空
$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==){
returnmail($this->mailTo,$this->mailSubject,$this->mailText,$mailHeader);
}
//--html或text格式
elseif($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.--;
//--发送邮件
returnmail($this->mailTo,$this->mailSubject,,$mailHeader);
}
//--文本加html加附件
elseif($this->mailText!=&&$this->mailHTML!=&&$this->mailAttachments!=){
$attachmentBoundary=$this->getRandomBoundary();
$mailHeader.=Content-Type:multipart/mixed;n;
$mailHeader.=boundary=.$attachmentBoundary..nn;
$mailHeader.=Thisisamulti-partmessageinMIMEformat.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.--;
returnmail($this->mailTo,$this->mailSubject,,$mailHeader);
}
returnfalse;
}
}
?>


评论


亲,登录后才可以留言!