phpmailer
一、各版本常用方法
(一)寄信三類方法:
屬性Mailer記載寄信的方法,有mail(預設),sendmail,smtp,分別用IsMail()、IsSendmail()、IsSMTP()進行設定:
- mail是使用 php 配置的郵件程式,以 mail() 函式寄信。
- sendmail會以ini_get('sendmail_path')檢查php配置參數,看是否配置了sendmail,若未配置再指定一個sendmail。寄信時用 popen() 對 sendmail 送去信頭及信文。
- smtp使用彈性最大,會載入 class.smtp.php ,並透過指定的 smtp 伺服器寄信,指定多個 smtp 可產生多個寄信方法。 gmail 算 smtp 。
通常 php 配置的郵件程式就是 sendmail ,而如果伺服器沒有配置,自己去架一個 sendmail 並不實用。所以 sendmail 幾乎可以省略不用。
而 php 也可能沒有配置的郵件程式, mail 方法也不一定可用。所以最可靠、最有彈性的方法是 smtp ,幾乎有 email 的人都會有 smtp 帳號可供使用。
以丁丁使用戰國策為例,有三種寄信方法:smtp有兩種:戰國策的localhost(免帳號驗證)和某一個gmail;另外就是 php 配置的 sendmail ,以mail()函式寄信即可。
以丁丁使用DS110+為例,有兩種寄信方法,皆為smtp:DS110+的localhost(mail station,免帳號驗證)和某一個gmail;php沒有配置任何寄信程式,不能使用mail()函式寄信。
二、早期版本(1.73版)
(一)安裝校調說明:
- 將 class/mail/phpmailer/class.phpmailer.php中
var $CharSet = "iso-8859-1";改為var $CharSet = 'UTF-8';
(二)方法一覽表:
- ishtml(布林值) :信文型態,true時ContentType設為text/html,其他時ContentType設為text/plain
- issmtp() :使用 SMTP servers 寄信
- ismail() :使用 php mail 函式寄信
- issendmail() :使用 sendmail 寄信
- isqmail() :使用 sendmail 寄信,且位置在/var/qmail/bin/sendmail
- addaddress(郵址,姓名) :加一位收件者,姓名可省略,預設為空字串
- addcc(郵址,姓名) :加一位副本收件者
- addbcc(郵址,姓名) :加一位密送副本收件者
- addreplyto(郵址,姓名) :加一位回函地址
- send() :寄信,會依Mailer的值,決定用以下三種方法寄信。以CreateHeader()得頭,以CreateBody()得體。
- sendmailsend(頭,體) :用sendmail寄信,會由sendmail程式寄信
- mailsend(頭,體) :用php mail()函式寄信
- smtpsend(頭,體) :載入class.smtp.php後,用SMTP寄信。
- smtpconnect() :連接並登入SMTP伺服器
- smtpclose() :關閉與SMTP伺服器的連結
- setlanguage(語系名,語系檔路徑) :調用不同語系的錯誤訊息檔,無中文
- addrappend(收件寄件類別,郵址陣列) :將各類諸郵址編為字串。
- addrformat(名稱郵址陣列) :將郵址以phrase類別,編為 ○○○ 或 "○○○" 格式,其中○○○適當編為B或Q碼。註標0是郵址,註標1是名稱。
- wraptext(字串,折行長度,是否qp) :折行。預設非qp
- setwordwrap() :對信文或信文的純文字部進行折行處理。
- createheader() :建信的頭部,包含寄收件者、主旨。
- createbody() :建信的體部,包含信文、附檔。
- getboundary(分區唯一碼,字集,內容型態,編碼方式) :造GetBoundary(分隔區),
- endboundary(分區唯一碼) :產生區結尾
- setmessagetype() :產生信文型態,有plain(無交替部無附檔)、attachments(無交替部有附檔)、alt(有交替部無附檔)、alt_attachments(有交替部有附檔)
- headerline(名稱,值) :產生頭部之一行
- textline(值) :產生體部之一行
- addattachment(路徑檔名,二段檔名,編碼,MIME格式) :加一個附檔,二段檔名可省略,編碼預設為base64,MIME預設為application/octet-stream
- attachall() :將諸附檔組拼成字串
- encodefile(路徑檔名,編碼方式) :叫用encodestring將檔案編碼為字串,預設編碼方式為B即base64
- encodestring(字串,編碼方式) :將字串編碼,預設為base64,其他尚有7bit,8bit,binary,quoted-printable等編碼。
- encodeheader(字串,類別) :將header判斷後自動編碼為B或Q,類別有phrase、comment、text三類,預設為text。
- encodeqp(字串) :以qp編碼後依每74字元折行。
- encodeq(字串,類別) :將字串以qp編碼,類別有phrase、comment、text三類,預設為text。
- addstringattachment(字串,檔名,編碼,MIME類別) :派各附檔之諸屬性。本方法其實沒用到。
- addembeddedimage(路徑檔名,cid,檔名,編碼,MIME類別):派信文用媒體附檔諸屬性。本方法其實沒用到。
- inlineimageexists() :查有無信文用媒體附檔。
- clearaddresses() :清to屬性為空陣列。
- clearccs() :清cc屬性為空陣列。
- clearbccs() :清bcc屬性為空陣列。
- clearreplytos() :清replyto屬性為空陣列。
- clearallrecipients() :清to,cc,bcc屬性為空陣列。
- clearattachments() :清attachment屬性為空陣列。
- clearcustomheaders() :清CustomHeader屬性為空陣列。
- seterror(錯誤訊息) :加設一項錯誤訊息,錯誤訊息代碼加1。
- rfcdate() :傳回星期幾,日月年時分秒+-時區
- servervar(變數名) :傳回Apache變數
- serverhostname() :傳回伺服器名
- lang(語系名如en) :由語系名叫setlanguage方法調用不同的錯誤訊息檔
- iserror() :傳回是否發生錯誤
- fixeol(字串) :將字串中的換行一律改成LE
- addcustomheader(字串) :加入一個頭項,將字串以「:」拆成兩個元素的陣列,再將此陣列加入CustomHeader為一元素。
(三)屬性一覽表:
- Priority 預設為 3 :信的優先等級,1 = High, 3 = Normal, 5 = low。
- CharSet 預設為 iso-8859-1 :字集,已被改為utf-8
- ContentType 預設為 text/plain :mime型態
- Encoding 預設為 8bit :編碼方式
- ErrorInfo 預設為 空值 :寄信時發生錯誤的原因
- From 預設為 root@localhost :寄件者郵址
- FromName 預設為 Root User :寄件者名稱
- Sender 預設為 空值 :回信郵址,如未指定(空值),通常就是寄件者
- Subject 預設為 空值 :主旨
- Body 預設為 空值 :信的內容
- AltBody 預設為 空值 :信內容的純文字交替格式段落
- WordWrap 預設為 0 :多少字才折行
- Mailer 預設為 mail :用SMTP、mail函式、sendmail
- Sendmail 預設為 /usr/sbin/sendmail:sendmail程式所在的位置
- PluginDir 預設為 :頭項值之一。
- Version 預設為 1.73 :頭項值之一。
- ConfirmReadingTo 預設為 :頭項值之一。
- Hostname 預設為 空值 :可由使用者指定,使用者未指定時,可由ServerHostname()方法傳回Hostname。
- Host 預設為 localhost :指出 SMTP servers
- Port 預設為 25 :SMTP使用的port
- Helo 預設為 空值 :試連SMTP
- SMTPAuth 預設為 空值 :設true為打開 SMTP 認證┐ 多數情形下SMTP
- Username 預設為 空值 :SMTP 帳號 ┤ 轉信不必認證
- Password 預設為 空值 :SMTP 密碼 ┘ 此三行可不寫
- Timeout 預設為 10 :連結SMTP伺服器,多久算逾時判定為連不上。
- SMTPDebug 預設為 空值 :設定smtp物件是否要debug
- SMTPKeepAlive 預設為 空值 :其值為真時,重置smtp物件
- smtp 預設為 空物件 :使用smtp寄信時,所生的smtp物件
- to 預設為 空陣列 :諸收件者
- cc 預設為 空陣列 :諸副本收件者
- bcc 預設為 空陣列 :諸密件副本收件者
- ReplyTo 預設為 空陣列 :諸回函地址
- attachment 預設為 空陣列 :諸附檔。
- CustomHeader 預設為 空陣列 :諸頭項。每一元素為一頭項,其[0]為:之前,其[1]為:之後。
- message_type 預設為 :信文型態。分plain(無交替部無附檔)、attachments(無交替部有附檔)、alt(有交替部無附檔)、alt_attachments(有交替部有附檔)
- boundary 預設為 空陣列 :諸boundary(分隔區)的唯一碼。
- language 預設為 空陣列 :現用語系諸錯誤訊息組成的陣列
- error_count 預設為 0 :發生錯誤數目
- LE 預設為 反斜n :換行字元
(四)丁丁調整:
以下兩組設定互斥:
維持「var $ContentType = "text/plain";」並加
$result .= sprintf("Content-Type: %s; charset=\"%s\"",
$this->ContentType, $this->CharSet); // by jj
或
- var $ContentType = "text/html";// 原值 "text/plain"
- 註解掉
#$result .= sprintf("Content-Type: %s; charset=\"%s\"",
#$this->ContentType, $this->CharSet); // by jj
(五)使用範例:
require("../phpmailer/class.phpmailer.php"); // 載入類別定義
$mail = new PHPMailer(); // 依類別產生物件$mail
$mail->IsSMTP(); // 使用 SMTP servers 寄信
$mail->Host = "atl.mail.cbeyond.com"; // 指出 SMTP servers
$mail->SMTPAuth = true; // 打開 SMTP 認證 ┐ 多數情形下SMTP
$mail->Username = "jyu@aemtechnology.com"; // SMTP 帳號 ┤ 轉信不必認證
$mail->Password = "12345"; // SMTP 密碼 ┘ 此三行可不寫
$mail->From = "jimiyu@gmail.com"; // 寄件者郵址
$mail->FromName = "呆呆吉米魚@Gmail"; // 寄件者名稱
$mail->AddAddress("jimiyu@seed.net.tw","吉米魚@SeedNet"); // 加一位收件者
$mail->AddAddress("jimiyu@gmail.com"); // 加一位收件者,不加姓名
$mail->AddReplyTo("jyu@aemtechnology.com","AEM"); // 加一位回函地址
$mail->WordWrap = 50; // 多少字才折行
$mail->AddAttachment("d:/index.php"); // 加一個附檔
$mail->AddAttachment("d:/", "AUTORUN.INF"); // 加一個附檔
$mail->IsHTML(true); // 是否以 HTML 格式做信
$mail->Subject = "測試mail"; // 主旨
$mail->Body = "This is the <b>HTML body</b>"; // 信的內容
$mail->AltBody = "This is the text-only body"; // 信的內容純文字交替格式段落
if(!$mail->Send()){ // 寄信,如果失敗
echo "Message was not sent <p>"; // 信沒寄
echo "Mailer Error: " . $mail->ErrorInfo; // 列出錯誤原因
exit; // 跳出程式
}
echo "Message has been sent"; // 信已經寄了
三、2.3版
(一)方法一覽表:
- IsHTML(布林值) :信文型態,true時ContentType設為text/html,其他時ContentType設為text/plain
- IsSMTP() :使用 SMTP servers 寄信
- IsMail() :使用 php mail 函式寄信
- IsSendmail() :使用 sendmail 寄信
- IsQmail() :使用 sendmail 寄信,且位置在/var/qmail/bin/sendmail
- AddAddress(郵址,姓名) :加一位收件者,姓名可省略,預設為空字串
- AddCC(郵址,姓名) :加一位副本收件者
- AddBCC(郵址,姓名) :加一位密送副本收件者
- AddReplyTo(郵址,姓名) :加一位回函地址
- Send() :寄信,會依Mailer的值,決定用以下三種方法寄信。以CreateHeader()得頭,以CreateBody()得體。
- SendmailSend(頭,體) :用sendmail寄信,會由sendmail程式寄信
- MailSend(頭,體) :用php mail()函式寄信
- SmtpSend(頭,體) :載入class.smtp.php後,用SMTP寄信。
- SmtpConnect() :連接並登入SMTP伺服器
- SmtpClose() :關閉與SMTP伺服器的連結
- SetLanguage(語系名,語系檔路徑) :調用不同語系的錯誤訊息檔,無中文
- AddrAppend(收件寄件類別,郵址陣列) :將各類諸郵址編為字串。
- AddrFormat(名稱郵址陣列) :將郵址以phrase類別,編為 ○○○ 或 "○○○" 格式,其中○○○適當編為B或Q碼。註標0是郵址,註標1是名稱。
- WrapText(字串,折行長度,是否qp) :折行。預設非qp
- UTF8CharBoundary
- SetWordWrap() :對信文或信文的純文字部進行折行處理。
- CreateHeader() :建信的頭部,包含寄收件者、主旨。
- GetMailMIME
- CreateBody() :建信的體部,包含信文、附檔。
- GetBoundary(分區唯一碼,字集,內容型態,編碼方式) :造GetBoundary(分隔區),
- EndBoundary(分區唯一碼) :產生區結尾
- SetMessageType() :產生信文型態,有plain(無交替部無附檔)、attachments(無交替部有附檔)、alt(有交替部無附檔)、alt_attachments(有交替部有附檔)
- HeaderLine(名稱,值) :產生頭部之一行
- TextLine(值) :產生體部之一行
- AddAttachment(路徑檔名,二段檔名,編碼,MIME格式) :加一個附檔,二段檔名可省略,編碼預設為base64,MIME預設為application/octet-stream
- AttachAll() :將諸附檔組拼成字串
- EncodeFile(路徑檔名,編碼方式) :叫用encodestring將檔案編碼為字串,預設編碼方式為B即base64
- EncodeString(字串,編碼方式) :將字串編碼,預設為base64,其他尚有7bit,8bit,binary,quoted-printable等編碼。
- EncodeHeader(字串,類別) :將header判斷後自動編碼為B或Q,類別有phrase、comment、text三類,預設為text。
- HasMultiBytes
- Base64EncodeWrapMB
- EncodeQP(字串) :以qp編碼後依每74字元折行。
- EncodeQ(字串,類別) :將字串以qp編碼,類別有phrase、comment、text三類,預設為text。
- AddStringAttachment(字串,檔名,編碼,MIME類別) :派各附檔之諸屬性。本方法其實沒用到。
- AddEmbeddedImage(路徑檔名,cid,檔名,編碼,MIME類別):派信文用媒體附檔諸屬性。本方法其實沒用到。
- InlineImageExists() :查有無信文用媒體附檔。
- ClearAddresses() :清to屬性為空陣列。
- ClearCCs() :清cc屬性為空陣列。
- ClearBCCs() :清bcc屬性為空陣列。
- ClearReplyTos() :清replyto屬性為空陣列。
- ClearAllRecipients() :清to,cc,bcc屬性為空陣列。
- ClearAttachments() :清attachment屬性為空陣列。
- ClearCustomHeaders() :清CustomHeader屬性為空陣列。
- IsError() :傳回是否發生錯誤
- AddCustomHeader(字串) :加入一個頭項,將字串以「:」拆成兩個元素的陣列,再將此陣列加入CustomHeader為一元素。
- MsgHTML :
- _mime_types :
- set :
- getFile :
- SecureHeader :
- Sign :
以下設為 private 方法
- SetError(錯誤訊息) :加設一項錯誤訊息,錯誤訊息代碼加1。
- RFCDate() :傳回星期幾,日月年時分秒+-時區
- ServerHostname() :傳回伺服器名
- Lang(語系名如en) :由語系名叫setlanguage方法調用不同的錯誤訊息檔
- FixEOL(字串) :將字串中的換行一律改成LE
(二)屬性一覽表:
- Priority 預設為 3 :信的優先等級,1 = High, 3 = Normal, 5 = low。
- CharSet 預設為 iso-8859-1 :字集,已被改為utf-8
- ContentType 預設為 text/plain :mime型態
- Encoding 預設為 8bit :編碼方式
- ErrorInfo 預設為 空值 :寄信時發生錯誤的原因
- From 預設為 root@localhost :寄件者郵址
- FromName 預設為 Root User :寄件者名稱
- Sender 預設為 空值 :回信郵址,如未指定(空值),通常就是寄件者
- Subject 預設為 空值 :主旨
- Body 預設為 空值 :信的內容
- AltBody 預設為 空值 :信內容的純文字交替格式段落
- WordWrap 預設為 0 :多少字才折行
- Mailer 預設為 mail :用SMTP、mail函式、sendmail
- Sendmail 預設為 /usr/sbin/sendmail:sendmail程式所在的位置
- PluginDir 預設為 :頭項值之一。
- Version 預設為 2.3 :頭項值之一,指示 phpMailer 的版本。
- ConfirmReadingTo 預設為 :頭項值之一。
- Hostname 預設為 空值 :可由使用者指定,使用者未指定時,可由ServerHostname()方法傳回Hostname。
- Host 預設為 localhost :指出 SMTP servers
- Port 預設為 25 :SMTP使用的port
- Helo 預設為 空值 :試連SMTP
- SMTPSecure 預設為 false :
- SMTPAuth 預設為 空值 :設true為打開 SMTP 認證┐ 多數情形下SMTP
- Username 預設為 空值 :SMTP 帳號 ┤ 轉信不必認證
- Password 預設為 空值 :SMTP 密碼 ┘ 此三行可不寫
- Timeout 預設為 10 :連結SMTP伺服器,多久算逾時判定為連不上。
- SMTPDebug 預設為 false :設定smtp物件是否要debug
- SMTPKeepAlive 預設為 false :其值為真時,重置smtp物件
- SingleTo 預設為 false :
- LE 預設為 "\r\n" :換行字元
以上設為 public 以下設為 private
- smtp 預設為 NULL :使用smtp寄信時,所生的smtp物件
- to 預設為 空陣列 :諸收件者
- cc 預設為 空陣列 :諸副本收件者
- bcc 預設為 空陣列 :諸密件副本收件者
- ReplyTo 預設為 空陣列 :諸回函地址
- attachment 預設為 空陣列 :諸附檔。
- CustomHeader 預設為 空陣列 :諸頭項。每一元素為一頭項,其[0]為:之前,其[1]為:之後。
- message_type 預設為 空字串 :信文型態。分plain(無交替部無附檔)、attachments(無交替部有附檔)、alt(有交替部無附檔)、alt_attachments(有交替部有附檔)
- boundary 預設為 空陣列 :諸boundary(分隔區)的唯一碼。
- language 預設為 空陣列 :現用語系諸錯誤訊息組成的陣列
- error_count 預設為 0 :發生錯誤數目
- sign_cert_file 預設為 空字串
- sign_key_file 預設為 空字串
- sign_key_pass 預設為 空字串
四、5.23版
請見
作者說明文件