PHPMailer:修訂版本之間的差異

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

2018年2月15日 (四) 14:25的修訂版本

2017年版本:6.0.3版,適用於 PHP Version 5.5

寄信兩檔:

  1. PHPMailer.php
  2. 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;
}
?>