您当前的位置: 首页 > 网站编程 > PHP教程 > PHP可发html格式邮件附件的发送邮件源码

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

作者:guanchaofeng 来源:本站整理 发布时间: 2009-06-12 21:21 点击:
PHP--下面这个类的功能则很强大,不但能发html格式的邮件,还可以发附件 ?php classEmail{ //---设置全局变量 var$mailTo=;//收件人 var$mailCC=;//抄送 var$mailBCC=;//秘密抄送 var$mailFrom=;//发件人 var$mailSubject=;//主题 var$mailText=;//文本格式的

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

  PHP--下面这个类的功能则很强大,不但能发html格式的邮件,还可以发附件
  <?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}|net|com|gov|mil|org|edu|int)$",$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){
  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的文件头
  *****************************************************/
  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;
  }
  }
  ?>
  
  使用方法:
  <?
  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可发html格式邮件附件的发送邮件源码"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4