PHPMailer:修訂版本之間的差異
出自福留子孫
第 10 行: | 第 10 行: | ||
require_once 'SMTP.php'; // by jj | require_once 'SMTP.php'; // by jj | ||
使其自動載入 SMTP.php 。 | 使其自動載入 SMTP.php 。 | ||
+ | |||
+ | 寄信的範例程式 smDemo.php: | ||
+ | <pre><?php | ||
+ | require("./class/phpmailer/PHPMailer.php"); | ||
+ | $mail = new PHPMailer\PHPMailer\PHPMailer; // 依類別造物件 | ||
+ | $mail->CharSet='utf-8'; // 設字集為utf-8,預設為iso-8859-1 | ||
+ | $mail->IsSMTP(); // 設屬性 Mailer = 'smtp',指定由 SMTP 寄信 | ||
+ | $mail->Host="smtp.gmail.com";// SMTP servers 是那一台機器,預設值為 'localhost' | ||
+ | $mail->SMTPSecure='tls'; // GMail指定的認證方式,預設值為空字串 | ||
+ | $mail->Port=587; // GMail指定TLS認證的 port ,預設值為 25 | ||
+ | $mail->SMTPAuth=true; // 為打開 SMTP 認證,預設值為 false | ||
+ | $mail->Username='xxx@gmail.com'; // SMTP 帳號,預設值為空字串 | ||
+ | $mail->Password='********'; // SMTP 密碼,預設值為空字串 | ||
+ | $mail->WordWrap=200; // 多少字折行,預設值為 0,不折行 | ||
+ | $mail->IsHTML(true); // 設 ContentType='text/html',信是 HTML 格式 | ||
+ | $mail->From='xxx@gmail.com';// 寄件人郵址,預設值為 'root@localhost' | ||
+ | $mail->FromName='○○○';// 寄件人姓名,預設值為 'Root User' | ||
+ | $mail->FromName='=?UTF-8?B?'.base64_encode($mail->FromName).'?='; | ||
+ | $mail->Subject='這是示範信件'; // 主旨,預設值為空字串 | ||
+ | $mail->Subject='=?UTF-8?B?'.base64_encode($mail->Subject).'?='; | ||
+ | // 信文從此開始,屬性Body,預設值為空字串 | ||
+ | $images=array(); | ||
+ | $fn='../路徑/示範信.html'; | ||
+ | $bodyDirname=dirname($fn); | ||
+ | if(filesize($fn)>0){ // 信文檔不是空檔 | ||
+ | $f=fopen($fn,"r"); | ||
+ | $body=fread($f,filesize($fn)); | ||
+ | fclose($f); | ||
+ | $mail->Body=str_replace("src='./images/","src='cid:",$body);// 將 src 換成 cid,並移除路徑 | ||
+ | $temp=cuts("src='","'",$body); // 將所有src指示的圖檔,取成陣列 | ||
+ | foreach($temp as $k=>$v){$images[$v]=1;} // 利用索引的唯一性,消除重覆的圖檔 | ||
+ | $images=array_keys($images); // 索引才是我們想要的諸檔 | ||
+ | }else{$mail->Body='';} | ||
+ | // 信文到此結束 | ||
+ | /// 加信的圖 | ||
+ | foreach($images as $image){ | ||
+ | if($image){ | ||
+ | $mail->AddEmbeddedImage($bodyDirname.'/'.$image,basename($image),basename($image),"base64","image/".substr(basename($image),-1*(strlen(strstr(basename($image),'.'))-1))); | ||
+ | } | ||
+ | } | ||
+ | $mail->ClearAllRecipients(); // 清空收件者陣列 | ||
+ | $mail->AddAddress('alledu2@gmail.com','=?UTF-8?B?'.base64_encode('丁志仁').'?='); // 加入收件者 | ||
+ | $mail->Send(); | ||
+ | // 以 $start開始、$end結束所夾的字串,蒐集起來構成陣列 | ||
+ | function cuts($start,$end,$str,$se=null){ | ||
+ | $len1=strlen($start); | ||
+ | $len2=strlen($end); | ||
+ | $ret=array(); | ||
+ | while(strlen($str)>0){ | ||
+ | $str=strstr($str,$start); | ||
+ | $str=substr($str,$len1); | ||
+ | if(strlen(substr($str,0,strpos($str,$end)))>0){ | ||
+ | if($se==1){$ret[]=$start.substr($str,0,strpos($str,$end));} | ||
+ | elseif($se==2){$ret[]=substr($str,0,strpos($str,$end)).$end;} | ||
+ | elseif($se==3){$ret[]=$start.substr($str,0,strpos($str,$end)).$end;} | ||
+ | else{$ret[]=substr($str,0,strpos($str,$end));} | ||
+ | } | ||
+ | $str=strstr($str,$end); | ||
+ | $str=substr($str,$len2); | ||
+ | } | ||
+ | return $ret; | ||
+ | } | ||
+ | ?></pre> |
2018年2月15日 (四) 14:25的修訂版本
2017年版本:6.0.3版,適用於 PHP Version 5.5
寄信兩檔:
- PHPMailer.php
- SMTP.php
將它們置於同一個資料夾。
在 PHPMailer.php 的「protected function smtpSend($header, $body)」函式裡增加一行:
require_once 'SMTP.php'; // by jj
使其自動載入 SMTP.php 。
寄信的範例程式 smDemo.php:
<?php require("./class/phpmailer/PHPMailer.php"); $mail = new PHPMailer\PHPMailer\PHPMailer; // 依類別造物件 $mail->CharSet='utf-8'; // 設字集為utf-8,預設為iso-8859-1 $mail->IsSMTP(); // 設屬性 Mailer = 'smtp',指定由 SMTP 寄信 $mail->Host="smtp.gmail.com";// SMTP servers 是那一台機器,預設值為 'localhost' $mail->SMTPSecure='tls'; // GMail指定的認證方式,預設值為空字串 $mail->Port=587; // GMail指定TLS認證的 port ,預設值為 25 $mail->SMTPAuth=true; // 為打開 SMTP 認證,預設值為 false $mail->Username='xxx@gmail.com'; // SMTP 帳號,預設值為空字串 $mail->Password='********'; // SMTP 密碼,預設值為空字串 $mail->WordWrap=200; // 多少字折行,預設值為 0,不折行 $mail->IsHTML(true); // 設 ContentType='text/html',信是 HTML 格式 $mail->From='xxx@gmail.com';// 寄件人郵址,預設值為 'root@localhost' $mail->FromName='○○○';// 寄件人姓名,預設值為 'Root User' $mail->FromName='=?UTF-8?B?'.base64_encode($mail->FromName).'?='; $mail->Subject='這是示範信件'; // 主旨,預設值為空字串 $mail->Subject='=?UTF-8?B?'.base64_encode($mail->Subject).'?='; // 信文從此開始,屬性Body,預設值為空字串 $images=array(); $fn='../路徑/示範信.html'; $bodyDirname=dirname($fn); if(filesize($fn)>0){ // 信文檔不是空檔 $f=fopen($fn,"r"); $body=fread($f,filesize($fn)); fclose($f); $mail->Body=str_replace("src='./images/","src='cid:",$body);// 將 src 換成 cid,並移除路徑 $temp=cuts("src='","'",$body); // 將所有src指示的圖檔,取成陣列 foreach($temp as $k=>$v){$images[$v]=1;} // 利用索引的唯一性,消除重覆的圖檔 $images=array_keys($images); // 索引才是我們想要的諸檔 }else{$mail->Body='';} // 信文到此結束 /// 加信的圖 foreach($images as $image){ if($image){ $mail->AddEmbeddedImage($bodyDirname.'/'.$image,basename($image),basename($image),"base64","image/".substr(basename($image),-1*(strlen(strstr(basename($image),'.'))-1))); } } $mail->ClearAllRecipients(); // 清空收件者陣列 $mail->AddAddress('alledu2@gmail.com','=?UTF-8?B?'.base64_encode('丁志仁').'?='); // 加入收件者 $mail->Send(); // 以 $start開始、$end結束所夾的字串,蒐集起來構成陣列 function cuts($start,$end,$str,$se=null){ $len1=strlen($start); $len2=strlen($end); $ret=array(); while(strlen($str)>0){ $str=strstr($str,$start); $str=substr($str,$len1); if(strlen(substr($str,0,strpos($str,$end)))>0){ if($se==1){$ret[]=$start.substr($str,0,strpos($str,$end));} elseif($se==2){$ret[]=substr($str,0,strpos($str,$end)).$end;} elseif($se==3){$ret[]=$start.substr($str,0,strpos($str,$end)).$end;} else{$ret[]=substr($str,0,strpos($str,$end));} } $str=strstr($str,$end); $str=substr($str,$len2); } return $ret; } ?>