本文章收藏了兩款利用phpmailer來發送郵件,當前如果你的機器配置好了php自帶的郵件發送功能那更好哦,mail()這個那就更方便了。
- */
- function smtp_mail ($sendto_email,$subject,$body) {
- global $mailconfig,$_cfg;
- $mail = new phpmailer();
- $mail->issmtp();
- $mail->host = $mailconfig['smtpservers'];//smtp servers
- $mail->smtpauth = true;// 啟用smtp驗證功能
- $mail->username = $mailconfig['smtpusername'];
- $mail->password = $mailconfig['smtppassword'];
- $mail->from =$mailconfig['smtpfrom'];
- $mail->fromname =$_cfg['site_name'];
- $mail->charset = "gb2312";
- $mail->encoding = "base64";
- $mail->addaddress($sendto_email,"");//收件人地址,可以替換成任何想要接收郵件的email信箱,格式是addaddress("收件人email","收件人姓名")
- $mail->addreplyto($mailconfig['addreplyto'],"");//增加回復標簽addreplyto
- $mail->ishtml(true);
- $mail->subject = $subject;
- $mail->body =$body;
- $mail->altbody ="text/html";//該屬性的設置是在郵件正文不支持html的備用顯示
- if(!$mail->send())
- {
- return false;
- //echo "郵件發送有誤
";
- //echo "郵件錯誤信息: " . $mail->errorinfo;
- }
- else {
- return true;
- }
- }
方法二
- 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<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,[url=mailto:c@c.com]c@c.com[/url]"); //抄送
- $mail-> setcc("d@b.com,[url=mailto:e@c.com]e@c.com[/url]"); //秘密抄送
- $mail->setfrom("[url=mailto:f@f.com]f@f.com[/url]");//發件人
- $mail->setsubject("主題") ; //主題
- $mail->settext("文本格式") ;//發送文本格式也可以是變量
- $mail->sethtml("html格式") ;//發送html格式也可以是變量
- $mail->setattachments("c:a.jpg") ;//添加附件,需表明路徑
- $mail->send(); //發送郵件
- ?>
新聞熱點
疑難解答