0

0

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

php中文网

php中文网

发布时间:2016-06-01 14:29:42

|

937人浏览过

|

来源于php中文网

原创

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 $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(); //发送邮件 

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1044

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

334

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

213

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

35

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

111

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

77

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

17

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

813

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

97

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
php初学者入门课程
php初学者入门课程

共10课时 | 0.7万人学习

tp6+adminlte搭建通用后台
tp6+adminlte搭建通用后台

共39课时 | 5.8万人学习

WordPress视频教程
WordPress视频教程

共23课时 | 9.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号