功能齐全的发送PHP邮件类

email.class.php

 

PHP代码
  1. <?php    
  2. class Email {    
  3. //---设置全局变量    
  4. var $mailTo = ""// 收件人    
  5. var $mailCC = ""// 抄送    
  6. var $mailBCC = ""// 秘密抄送    
  7. var $mailFrom = ""// 发件人    
  8. var $mailSubject = ""// 主题    
  9. var $mailText = ""// 文本格式的信件主体    
  10. var $mailHTML = ""// html格式的信件主体    
  11. var $mailAttachments = ""// 附件    
  12. /* 函数setTo($inAddress) :用于处理邮件的地址 参数 $inAddress   
  13. 为包涵一个或多个字串,email地址变量,使用逗号来分割多个邮件地址   
  14. 默认返回值为true   
  15. **********************************************************/    
  16. function setTo($inAddress){    
  17. //--用explode()函数根据”,”对邮件地址进行分割    
  18. $addressArray = explode",",$inAddress);    
  19. //--通过循环对邮件地址的合法性进行检查    
  20. for($i=0;$i<count($addressArray);$i++){ if($this->checkEmail($addressArray[$i])==false) return false; }    
  21. //--所有合法的email地址存入数组中    
  22. $this->mailTo = implode($addressArray",");    
  23. return true; }    
  24. /**************************************************   
  25. 函数 setCC($inAddress) 设置抄送人邮件地址   
  26. 参数 $inAddress 为包涵一个或多个邮件地址的字串,email地址变量,   
  27. 使用逗号来分割多个邮件地址 默认返回值为true   
  28. **************************************************************/    
  29. function setCC($inAddress){    
  30. //--用explode()函数根据”,”对邮件地址进行分割    
  31. $addressArray = explode",",$inAddress);    
  32. //--通过循环对邮件地址的合法性进行检查    
  33. for($i=0;$i<count($addressArray);$i++){ if($this->checkEmail($addressArray[$i])==false) return false; }    
  34. //--所有合法的email地址存入数组中    
  35. $this->mailCC = implode($addressArray",");    
  36. return true; }    
  37. /***************************************************   
  38. 函数setBCC($inAddress) 设置秘密抄送地址 参数 $inAddress 为包涵一个或多   
  39. 个邮件地址的字串,email地址变量,使用逗号来分割多个邮件地址 默认返回值为   
  40. true   
  41. ******************************************/    
  42. function setBCC($inAddress){    
  43. //--用explode()函数根据”,”对邮件地址进行分割    
  44. $addressArray = explode",",$inAddress);    
  45. //--通过循环对邮件地址的合法性进行检查    
  46. for($i=0;$i<count($addressArray);$i++)    
  47. if($this->checkEmail($addressArray[$i])==false)    
  48. return false;    
  49. }    
  50. //--所有合法的email地址存入数组中    
  51. $this->mailBCC = implode($addressArray",");    
  52. return true;    
  53. }    
  54. /*****************************************************************   
  55. 函数setFrom($inAddress):设置发件人地址 参数 $inAddress 为包涵邮件   
  56. 地址的字串默认返回值为true   
  57. ***************************************/    
  58. function setFrom($inAddress){    
  59. if($this->checkEmail($inAddress)){    
  60. $this->mailFrom = $inAddress;    
  61. return true;    
  62. return false; }    
  63. /**********************   
  64. 函数 setSubject($inSubject) 用于设置邮件主题参数$inSubject为字串,   
  65. 默认返回的是true   
  66. *******************************************/    
  67. function setSubject($inSubject){    
  68. if(strlen(trim($inSubject)) > 0){    
  69. $this->mailSubject = ereg_replace"n""",$inSubject);    
  70. return true; }    
  71. return false; }    
  72. /****************************************************   
  73. 函数setText($inText) 设置文本格式的邮件主体参数 $inText 为文本内容默   
  74. 认返回值为true   
  75. ****************************************/    
  76. function setText($inText){    
  77. if(strlen(trim($inText)) > 0){    
  78. $this->mailText = $inText;    
  79. return true; }    
  80. return false;    
  81. }    
  82. /**********************************   
  83. 函数setHTML($inHTML) 设置html格式的邮件主体参数$inHTML为html格式,   
  84. 默认返回值为true   
  85. ************************************/    
  86. function setHTML($inHTML){    
  87. if(strlen(trim($inHTML)) > 0){    
  88. $this->mailHTML = $inHTML;    
  89. return true; }    
  90. return false; }    
  91. /**********************   
  92. 函数 setAttachments($inAttachments) 设置邮件的附件 参数$inAttachments   
  93. 为一个包涵目录的字串,也可以包涵多个文件用逗号进行分割 默认返回值为true   
  94. *******************************************/    
  95. function setAttachments($inAttachments){    
  96. if(strlen(trim($inAttachments)) > 0){    
  97. $this->mailAttachments = $inAttachments;    
  98. return true; }    
  99. return false; }    
  100. /*********************************   
  101. 函数 checkEmail($inAddress) :这个函数我们前面已经调用过了,主要就是   
  102. 用于检查email地址的合法性   
  103. *****************************************/    
  104. function checkEmail($inAddress){    
  105. return (ereg"^[^@ ]+@([a-zA-Z0-9-]+.)+([a-zA-Z0-9-]{2}|net|com|gov|mil|org|edu|int)$",$inAddress));    
  106. }    
  107. /*************************************************   
  108. 函数loadTemplate($inFileLocation,$inHash,$inFormat) 读取临时文件并且   
  109. 替换无用的信息参数$inFileLocation用于定位文件的目录   
  110. $inHash 由于存储临时的值 $inFormat 由于放置邮件主体   
  111. ***********************************************************/    
  112. function loadTemplate($inFileLocation,$inHash,$inFormat){    
  113. /* 比如邮件内有如下内容: Dear ~!UserName~,   
  114. Your address is ~!UserAddress~ */    
  115. //--其中”~!”为起始标志”~”为结束标志    
  116. $templateDelim = "~";    
  117. $templateNameStart = "!";    
  118. //--找出这些地方并把他们替换掉    
  119. $templateLineOut = ""//--打开临时文件    
  120. if($templateFile = fopen($inFileLocation"r")){    
  121. while(!feof($templateFile)){    
  122. $templateLine = fgets($templateFile,1000);    
  123. $templateLineArray = explode($templateDelim,$templateLine);    
  124. for$i=0; $i<count($templateLineArray);$i++){    
  125. //--寻找起始位置    
  126. if(strcspn($templateLineArray[$i],$templateNameStart)==0){    
  127. //--替换相应的值    
  128. $hashName = substr($templateLineArray[$i],1);    
  129. //--替换相应的值    
  130. $templateLineArray[$i] = ereg_replace($hashName,(string)$inHash[$hashName],$hashName);    
  131. }    
  132. }    
  133. //--输出字符数组并叠加    
  134. $templateLineOut .= implode($templateLineArray"");    
  135. //--关闭文件fclose($templateFile);    
  136. //--设置主体格式(文本或html)    
  137. ifstrtoupper($inFormat)== "TEXT" )    
  138. return($this->setText($templateLineOut));    
  139. else ifstrtoupper($inFormat)== "HTML" )    
  140. return($this->setHTML($templateLineOut));    
  141. return false;    
  142. }    
  143. /*****************************************   
  144. 函数 getRandomBoundary($offset) 返回一个随机的边界值   
  145. 参数 $offset 为整数 – 用于多管道的调用 返回一个md5()编码的字串   
  146. ****************************************/    
  147. function getRandomBoundary($offset = 0){    
  148. //--随机数生成    
  149. srand(time()+$offset);    
  150. //--返回 md5 编码的32位 字符长度的字串    
  151. return ( "----".(md5(rand()))); }    
  152. /********************************************   
  153. 函数: getContentType($inFileName)用于判断附件的类型   
  154. **********************************************/    
  155. function getContentType($inFileName){    
  156. //--去除路径    
  157. $inFileName = basename($inFileName);    
  158. //--去除没有扩展名的文件    
  159. if(strrchr($inFileName".") == false){    
  160. return "application/octet-stream";    
  161. }    
  162. //--提区扩展名并进行判断    
  163. $extension = strrchr($inFileName".");    
  164. switch($extension){    
  165. case ".gif"return "image/gif";    
  166. case ".gz"return "application/x-gzip";    
  167. case ".htm"return "text/html";    
  168. case ".html"return "text/html";    
  169. case ".jpg"return "image/jpeg";    
  170. case ".tar"return "application/x-tar";    
  171. case ".txt"return "text/plain";    
  172. case ".zip"return "application/zip";    
  173. defaultreturn "application/octet-stream";    
  174. }    
  175. return "application/octet-stream";    
  176. }    
  177. /**********************************************   
  178. 函数formatTextHeader把文本内容加上text的文件头   
  179. *****************************************************/    
  180. function formatTextHeader(){ $outTextHeader = "";    
  181. $outTextHeader .= "Content-Type: text/plain;   
  182. charset=us-asciin";    
  183. $outTextHeader .= "Content-Transfer-Encoding: 7bitnn";    
  184. $outTextHeader .= $this->mailText. "n";    
  185. return $outTextHeader;    
  186. /************************************************   
  187. 函数formatHTMLHeader()把邮件主体内容加上html的文件头   
  188. ******************************************/    
  189. function formatHTMLHeader(){    
  190. $outHTMLHeader = "";    
  191. $outHTMLHeader .= "Content-Type: text/html;   
  192. charset=us-asciin";    
  193. $outHTMLHeader .= "Content-Transfer-Encoding: 7bitnn";    
  194. $outHTMLHeader .= $this->mailHTML. "n";    
  195. return $outHTMLHeader;    
  196. }    
  197. /**********************************   
  198. 函数 formatAttachmentHeader($inFileLocation) 把邮件中的附件标识出来   
  199. ********************************/    
  200. function formatAttachmentHeader($inFileLocation){    
  201. $outAttachmentHeader = "";    
  202. //--用上面的函数getContentType($inFileLocation)得出附件类型    
  203. $contentType = $this->getContentType($inFileLocation);    
  204. //--如果附件是文本型则用标准的7位编码    
  205. if(ereg"text",$contentType)){    
  206. $outAttachmentHeader .= "Content-Type: ".$contentType";n";    
  207. $outAttachmentHeader .= ' name="'.basename($inFileLocation). '"'"n";    
  208. $outAttachmentHeader .= "Content-Transfer-Encoding: 7bitn";    
  209. $outAttachmentHeader .= "Content-Disposition: attachment;n";    
  210. $outAttachmentHeader .= ' filename="'.basename($inFileLocation). '"'"nn";    
  211. $textFile = fopen($inFileLocation"r");    
  212. while(!feof($textFile)){    
  213. $outAttachmentHeader .= fgets($textFile,1000);    
  214. }    
  215. //--关闭文件 fclose($textFile);    
  216. $outAttachmentHeader .= "n";    
  217. }    
  218. //--非文本格式则用64位进行编码    
  219. else$outAttachmentHeader .= "Content-Type: ".$contentType";n";    
  220. $outAttachmentHeader .= ' name="'.basename($inFileLocation). '"'"n";    
  221. $outAttachmentHeader .= "Content-Transfer-Encoding: base64n";    
  222. $outAttachmentHeader .= "Content-Disposition: attachment;n";    
  223. $outAttachmentHeader .= ' filename="'.basename($inFileLocation). '"'"nn";    
  224. //--调用外部命令uuencode进行编码    
  225. exec"uuencode -m $inFileLocation nothing_out",$returnArray);    
  226. for ($i = 1; $i<(count($returnArray)); $i++){    
  227. $outAttachmentHeader .= $returnArray[$i]. "n";    
  228. }    
  229. return $outAttachmentHeader;    
  230. }    
  231. /******************************   
  232. 函数 send()用于发送邮件,发送成功返回值为true   
  233. ************************************/    
  234. function send(){    
  235. //--设置邮件头为空    
  236. $mailHeader = "";    
  237. //--添加抄送人    
  238. if($this->mailCC != "")    
  239. $mailHeader .= "CC: ".$this->mailCC. "n";    
  240. //--添加秘密抄送人    
  241. if($this->mailBCC != "")    
  242. $mailHeader .= "BCC: ".$this->mailBCC. "n";    
  243. //--添加发件人    
  244. if($this->mailFrom != "")    
  245. $mailHeader .= "FROM: ".$this->mailFrom. "n";    
  246. //---------------------------邮件格式------------------------------    
  247. //--文本格式    
  248. if($this->mailText != "" && $this->mailHTML == "" && $this->mailAttachments == ""){    
  249. return mail($this->mailTo,$this->mailSubject,$this->mailText,$mailHeader);    
  250. }    
  251. //--html或text格式    
  252. else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments == ""){    
  253. $bodyBoundary = $this->getRandomBoundary();    
  254. $textHeader = $this->formatTextHeader();    
  255. $htmlHeader = $this->formatHTMLHeader();    
  256. //--设置 MIME-版本    
  257. $mailHeader .= "MIME-Version: 1.0n";    
  258. $mailHeader .= "Content-Type: multipart/alternative;n";    
  259. $mailHeader .= ' boundary="'.$bodyBoundary'"';    
  260. $mailHeader .= "nnn";    
  261. //--添加邮件主体和边界    
  262. $mailHeader .= "--".$bodyBoundary"n";    
  263. $mailHeader .= $textHeader;    
  264. $mailHeader .= "--".$bodyBoundary"n";    
  265. //--添加html标签    
  266. $mailHeader .= $htmlHeader;    
  267. $mailHeader .= "n--".$bodyBoundary"--";    
  268. //--发送邮件    
  269. return mail($this->mailTo,$this->mailSubject, "",$mailHeader);    
  270. }    
  271. //--文本加html加附件    
  272. else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments != ""){    
  273. $attachmentBoundary = $this->getRandomBoundary();    
  274. $mailHeader .= "Content-Type: multipart/mixed;n";    
  275. $mailHeader .= ' boundary="'.$attachmentBoundary'"'"nn";    
  276. $mailHeader .= "This is a multi-part message in MIME format.n";    
  277. $mailHeader .= "--".$attachmentBoundary"n";    
  278. $bodyBoundary = $this->getRandomBoundary(1);    
  279. $textHeader = $this->formatTextHeader();    
  280. $htmlHeader = $this->formatHTMLHeader();    
  281. $mailHeader .= "MIME-Version: 1.0n";    
  282. $mailHeader .= "Content-Type: multipart/alternative;n";    
  283. $mailHeader .= ' boundary="'.$bodyBoundary'"';    
  284. $mailHeader .= "nnn";    
  285. $mailHeader .= "--".$bodyBoundary"n";    
  286. $mailHeader .= $textHeader;    
  287. $mailHeader .= "--".$bodyBoundary"n";    
  288. $mailHeader .= $htmlHeader;    
  289. $mailHeader .= "n--".$bodyBoundary"--";    
  290. //--获取附件值    
  291. $attachmentArray = explode",",$this->mailAttachments);    
  292. //--根据附件的个数进行循环    
  293. for($i=0;$i<count($attachmentArray);$i++){    
  294. //--分割 $mailHeader .= "n--".$attachmentBoundary. "n";    
  295. //--附件信息    
  296. $mailHeader .= $this->formatAttachmentHeader($attachmentArray[$i]);    
  297. }    
  298. $mailHeader .= "--".$attachmentBoundary"--";    
  299. return mail($this->mailTo,$this->mailSubject, "",$mailHeader);    
  300. }    
  301. return false;    
  302. }    
  303. }    
  304. ?>    
  305.  

 

使用方法:
 

PHP代码
  1. <?    
  2. Include “email.class”    
  3.   
  4. $mail->setTo("a@a.com"); //收件人    
  5. $mail-> setCC("b@b.com,c@c.com"); //抄送    
  6. $mail-> setCC("d@b.com,e@c.com"); //秘密抄送    
  7. $mail->setFrom(“f@f.com”);//发件人    
  8. $mail->setSubject(“主题”) ; //主题    
  9. $mail->setText(“文本格式”) ;//发送文本格式也可以是变量    
  10. $mail->setHTML(“html格式”) ;//发送html格式也可以是变量    
  11. $mail->setAttachments(“c:a.jpg”) ;//添加附件,需表明路径    
  12. $mail->send(); //发送邮件   
  13.   
  14. ?>   

 


文章如转载,请注明:转载自:第九街-PHP[http://www.9streets.cn/]
本文链接地址:
发布者:9streets于 2009-11-25 发表 | 我要评论(1) | 阅读次数(1557)

转播到腾讯微博


下一篇:php 邮件类
首页第九街博客由来关于博主联系博主免责条款隐私保护九街项目流程 | 网站地图 | 申请友情链接