热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP的类--功能齐全的发送邮件类

php的类--功能齐全的发送邮件类前面我们已经介绍过了一个用于群发邮件的类,那个类的功能只能发文本格式的邮件,下面这个类的功能则很强大,不但能发html格式的邮件,还可以发附件<?phpclassEmail{ ---设置全局变量var$mailTo"";收件人&nb
php的类--功能齐全的发送邮件类


前面我们已经介绍过了一个用于群发邮件的类,那个类的功能只能发文本格式的邮件,下面这个类的功能则很强大,不但能发html格式的邮件,还可以发附件
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;$icheckEmail($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;$icheckEmail($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 { 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 //--寻找起始位置 
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 //--分割 $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(); //发送邮件


推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
author-avatar
手机用户2502903557
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有