使用php發送有附件的電子郵件-(PHPMailer使用的實例分析)_PHP教程

      編輯Tag賺U幣
      教程Tag:phpphpmailer添加

      推薦:關于二級目錄拖拽排序的實現(源碼示例下載)
      本篇文章介紹了,關于二級目錄拖拽排序的實現(源碼示例下載)。需要的朋友參考下

      復制代碼 代碼如下:www.wf0088.com

      /*PHPMailer是一個用于發送電子郵件的PHP函數包。它提供的功能包括:
        *.在發送郵時指定多個收件人,抄送地址,暗送地址和回復地址
        *.支持多種郵件編碼包括:8bit,base64,binary和quoted-printable
        *.支持SMTP驗證
        *.支持冗余SMTP服務器
        *.支持帶附件的郵件和Html格式的郵件
        *.自定義郵件頭
        *.支持在郵件中嵌入圖片
        *.調試靈活
        *.經測試兼容的SMTP服務器包括:Sendmail,qmail,Postfix,Imail,Exchange等
        *.可運行在任何平臺之上

      phpMailer是一個非常強大的php發送郵件類,可以設定發送郵件地址、回復地址、郵件主題、富文本內容,上傳附件,.....
      官方網站:http://phpmailer.worxware.com/
      下載地址:http://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list
      */
      require_once('include/PHPMailer/class.phpmailer.php'); //導入PHPMAILER類
      $mail = new PHPMailer(); //創建實例
      $mail -> CharSet='utf-8'; //設置字符集
      $mail -> SetLanguage('ch','include/PHPMailer/language/'); //設置語言類型和語言文件所在目錄
      $mail -> IsSMTP(); //使用SMTP方式發送
      $mail -> SMTPAuth = true; //設置服務器是否需要SMTP身份驗證
      $mail -> Host = SMTP_SERVER; //SMTP 主機地址
      $mail -> Port = SMTP_SERVER_PORT; //SMTP 主機端口
      $mail -> From = SMTP_USER_MAIL; //發件人EMAIL地址
      $mail -> FromName = 'jasonxu'; //發件人在SMTP主機中的用戶名
      $mail -> Username = SMTP_USER_NAME; //發件人的姓名
      $mail -> Password = SMTP_USER_PASS; //發件人在SMTP主機中的密碼
      $mail -> Subject = '測試郵件的標題'; //郵件主題
      $mail -> AltBody = 'text/html'; //設置在郵件正文不支持HTML時的備用顯示
      $mail -> Body = '測試郵件的內容';//郵件內容做成
      $mail -> IsHTML(true); //是否是HTML郵件
      $mail -> AddAddress('chinajason2008#gmail.com','jasonxu'); //收件人的地址和姓名
      $mail -> AddReplyTo('chinajason2008#gmail.com','jasonxu'); //收件人回復時回復給的地址和姓名
      $mail -> AddAttachment('include/id.csv','att.csv');//附件的路徑和附件名稱
      if(!$mail -> Send()) //發送郵件
      var_dump($mail -> ErrorInfo); //查看發送的錯誤信息

      注意:phpmailer如果添加附件的時候,在附件名稱里一定要寫明附件的后綴,如果不寫明附件后綴,默認的附件后綴會是.txt。
      比如$mail -> AddAttachment('include/id.csv','att');//附件的路徑和附件名稱
      如果向上面一樣添加附件發送,則最終接到的附件可能是att.txt。
      AddAttachment可以設置附件編碼方式和附件類型,比如上面的附件添加也可以設置為
      $mail -> AddAttachment('include/id.csv','att.csv',"binary","text/comma-separated-values");//附件的路徑和附件名稱、
      附件的編碼方式大概有這么幾種:支持8bit, base64, binary, and quoted-printable 編碼

      而CSV可接受的MIME Type
      · application/octet-stream
      · text/comma-separated-values(推薦)
      · text/csv
      所以,csv格式文件的附件類型可以是上面三種中的任意一種

      以前項目中郵件發送的一個實例,整理個縮略版,方便套用:

      復制代碼 代碼如下:www.wf0088.com

      $body=$_smtp_body;
      $mail=new PHPMailer();//得到一個PHPMailer實例
      //$mail->SMTPSecure='tls';
      $mail->CharSet="utf-8"; //設置編碼
      $mail->IsSMTP();//設置采用SMTP方式發送郵件
      $mail->Host=$_smtp_server;//設置SMTP郵件服務器的地址
      $mail->Port=$_smtp_port;//設置郵件服務器的端口,默認為25
      $mail->From=$_smtp_from_mail; //設置發件人的郵箱地址
      $mail->FromName=$_smtp_from_name;//設置發件人的姓名
      $mail->Username=$_smtp_username;
      $mail->Password=$_smtp_password;
      $mail->AddAddress("$email","");//設置收件的地址(參數1)和姓名(參數2)
      $mail->SMTPAuth=true;//開啟SMTP認證
      $mail->Subject=$_smtp_subject;//設置郵件的標題
      //$mail->AltBody="text/html";
      $mail->Body=$body;//郵件內容
      $mail->IsHTML(true);//設置內容是否為html類型
      //$mail->WordWrap=50; //設置每行的字符數
      //$mail->AddReplyTo("samzhang@tencent.com","samzhang"); //設置回復的收件人的地址
      $mail->SMTPDebug=0;
      if($mail->Send()){//發送郵件
      exit 'ok';
      }else{
      exit 'fail';
      }

      大概記得以前初次使用PHPMailer的時候,出現過莫名奇妙的問題,也在網上花了不少時間找資料,最終才得以解決。目前記得服務器PHP環境不能禁止fsockopen函數,否則郵件發送不了,但也有解決的辦法。總之,一開始使用,總有不順,由于時間久遠,現在想來,也不知道具體改了什么。所以,將現在正在使用的PHPMailer目錄文件打包上傳到CSDN,也為方便以后使用吧,同時也方便為此事煩惱的朋友。PHPMailer下載:
      另外,將當時出現的問題所收錄的內容整理如下:

      1、Error: Could not connect to SMTP host
      原因1:不郵郵件系統要求的smtp請求不同一,但是都允許大寫,有些不支持小寫,比如網易,騰訊的郵箱。(至于是不是這樣,我沒測試過,反正都改為大寫,也不影響)

      解決方法:

      復制代碼 代碼如下:www.wf0088.com

      public function IsSMTP() {
      $this->Mailer ='SMTP'; // 將smtp ->SMTP ;即原來是小寫,現在大寫。
      }

      // Choose the mailer and send through it
      switch($this->Mailer) {
      case 'sendmail':
      return $this->SendmailSend($header, $body);
      case 'SMTP'://同樣 將smtp ->SMTP ;即原來是小寫,現在大寫。
      return $this->SmtpSend($header, $body);
      case 'mail':
      default:
      return $this->MailSend($header, $body);
      }


      2、SMTP Error: Could not connect to SMTP host
      原因:有的虛擬主機,或服務器,為了安全起見屏蔽了“fsockopen()函數”導致無法發送郵件

      解決方法:

      啟用fsockopen函數

      首先,在php.ini中去掉下面的兩個分號

      ;extension=php_sockets.dll

      ;extension=php_openssl.dll

      替換fsockopen函數

      可以將class.smtp.php文件中fsockopen函數換成pfsockopen函數


      3、Could not instantiate mail function
      原因:

      設置的參數不正確,我使用了gmail做一些基本測試,需要在次設置其他參數。

      解決方法:

      $mail->SMTPSecure = ‘tls'; //只需要加上這句

      注:這種錯誤我沒碰到過,所以在上面的例子中,這個內容我是加了注釋的。如果碰到這種錯誤的,可以使用這句試試。

      分享:php上傳apk后自動提取apk包信息的使用(示例下載)
      本篇文章介紹了,php上傳apk后自動提取apk包信息的使用(示例下載)需要的朋友參考下

      來源:模板無憂//所屬分類:PHP教程/更新時間:2013-04-27
      相關PHP教程