PHP发送邮件源码 可发html格式邮件 附件

<? 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 ;
}
}
?>  

使用方法:
<?
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();  // 发送邮件
?>
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值