phpmailer

一、各版本常用方法

(一)寄信三類方法:

屬性Mailer記載寄信的方法,有mail(預設),sendmail,smtp,分別用IsMail()、IsSendmail()、IsSMTP()進行設定:

  1. mail是使用 php 配置的郵件程式,以 mail() 函式寄信。
  2. sendmail會以ini_get('sendmail_path')檢查php配置參數,看是否配置了sendmail,若未配置再指定一個sendmail。寄信時用 popen() 對 sendmail 送去信頭及信文。
  3. 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版)

(一)安裝校調說明:

  1. 將 class/mail/phpmailer/class.phpmailer.php中
    var $CharSet = "iso-8859-1";改為var $CharSet = 'UTF-8';

(二)方法一覽表:

  1. ishtml(布林值) :信文型態,true時ContentType設為text/html,其他時ContentType設為text/plain
  2. issmtp() :使用 SMTP servers 寄信
  3. ismail() :使用 php mail 函式寄信
  4. issendmail() :使用 sendmail 寄信
  5. isqmail() :使用 sendmail 寄信,且位置在/var/qmail/bin/sendmail
  6. addaddress(郵址,姓名) :加一位收件者,姓名可省略,預設為空字串
  7. addcc(郵址,姓名) :加一位副本收件者
  8. addbcc(郵址,姓名) :加一位密送副本收件者
  9. addreplyto(郵址,姓名) :加一位回函地址
  10. send() :寄信,會依Mailer的值,決定用以下三種方法寄信。以CreateHeader()得頭,以CreateBody()得體。
  11. sendmailsend(頭,體) :用sendmail寄信,會由sendmail程式寄信
  12. mailsend(頭,體) :用php mail()函式寄信
  13. smtpsend(頭,體) :載入class.smtp.php後,用SMTP寄信。
  14. smtpconnect() :連接並登入SMTP伺服器
  15. smtpclose() :關閉與SMTP伺服器的連結
  16. setlanguage(語系名,語系檔路徑) :調用不同語系的錯誤訊息檔,無中文
  17. addrappend(收件寄件類別,郵址陣列) :將各類諸郵址編為字串。
  18. addrformat(名稱郵址陣列) :將郵址以phrase類別,編為 ○○○ 或 "○○○" 格式,其中○○○適當編為B或Q碼。註標0是郵址,註標1是名稱。
  19. wraptext(字串,折行長度,是否qp) :折行。預設非qp
  20. setwordwrap() :對信文或信文的純文字部進行折行處理。
  21. createheader() :建信的頭部,包含寄收件者、主旨。
  22. createbody() :建信的體部,包含信文、附檔。
  23. getboundary(分區唯一碼,字集,內容型態,編碼方式) :造GetBoundary(分隔區),
  24. endboundary(分區唯一碼) :產生區結尾
  25. setmessagetype() :產生信文型態,有plain(無交替部無附檔)、attachments(無交替部有附檔)、alt(有交替部無附檔)、alt_attachments(有交替部有附檔)
  26. headerline(名稱,值) :產生頭部之一行
  27. textline(值) :產生體部之一行
  28. addattachment(路徑檔名,二段檔名,編碼,MIME格式) :加一個附檔,二段檔名可省略,編碼預設為base64,MIME預設為application/octet-stream
  29. attachall() :將諸附檔組拼成字串
  30. encodefile(路徑檔名,編碼方式) :叫用encodestring將檔案編碼為字串,預設編碼方式為B即base64
  31. encodestring(字串,編碼方式) :將字串編碼,預設為base64,其他尚有7bit,8bit,binary,quoted-printable等編碼。
  32. encodeheader(字串,類別) :將header判斷後自動編碼為B或Q,類別有phrase、comment、text三類,預設為text。
  33. encodeqp(字串) :以qp編碼後依每74字元折行。
  34. encodeq(字串,類別) :將字串以qp編碼,類別有phrase、comment、text三類,預設為text。
  35. addstringattachment(字串,檔名,編碼,MIME類別) :派各附檔之諸屬性。本方法其實沒用到。
  36. addembeddedimage(路徑檔名,cid,檔名,編碼,MIME類別):派信文用媒體附檔諸屬性。本方法其實沒用到。
  37. inlineimageexists() :查有無信文用媒體附檔。
  38. clearaddresses() :清to屬性為空陣列。
  39. clearccs() :清cc屬性為空陣列。
  40. clearbccs() :清bcc屬性為空陣列。
  41. clearreplytos() :清replyto屬性為空陣列。
  42. clearallrecipients() :清to,cc,bcc屬性為空陣列。
  43. clearattachments() :清attachment屬性為空陣列。
  44. clearcustomheaders() :清CustomHeader屬性為空陣列。
  45. seterror(錯誤訊息) :加設一項錯誤訊息,錯誤訊息代碼加1。
  46. rfcdate() :傳回星期幾,日月年時分秒+-時區
  47. servervar(變數名) :傳回Apache變數
  48. serverhostname() :傳回伺服器名
  49. lang(語系名如en) :由語系名叫setlanguage方法調用不同的錯誤訊息檔
  50. iserror() :傳回是否發生錯誤
  51. fixeol(字串) :將字串中的換行一律改成LE
  52. addcustomheader(字串) :加入一個頭項,將字串以「:」拆成兩個元素的陣列,再將此陣列加入CustomHeader為一元素。

(三)屬性一覽表:

  1. Priority 預設為 3 :信的優先等級,1 = High, 3 = Normal, 5 = low。
  2. CharSet 預設為 iso-8859-1 :字集,已被改為utf-8
  3. ContentType 預設為 text/plain :mime型態
  4. Encoding 預設為 8bit :編碼方式
  5. ErrorInfo 預設為 空值 :寄信時發生錯誤的原因
  6. From 預設為 root@localhost :寄件者郵址
  7. FromName 預設為 Root User :寄件者名稱
  8. Sender 預設為 空值 :回信郵址,如未指定(空值),通常就是寄件者
  9. Subject 預設為 空值 :主旨
  10. Body 預設為 空值 :信的內容
  11. AltBody 預設為 空值 :信內容的純文字交替格式段落
  12. WordWrap 預設為 0 :多少字才折行
  13. Mailer 預設為 mail :用SMTP、mail函式、sendmail
  14. Sendmail 預設為 /usr/sbin/sendmail:sendmail程式所在的位置
  15. PluginDir 預設為 :頭項值之一。
  16. Version 預設為 1.73 :頭項值之一。
  17. ConfirmReadingTo 預設為 :頭項值之一。
  18. Hostname 預設為 空值 :可由使用者指定,使用者未指定時,可由ServerHostname()方法傳回Hostname。
  19. Host 預設為 localhost :指出 SMTP servers
  20. Port 預設為 25 :SMTP使用的port
  21. Helo 預設為 空值 :試連SMTP
  22. SMTPAuth 預設為 空值 :設true為打開 SMTP 認證┐ 多數情形下SMTP
  23. Username 預設為 空值 :SMTP 帳號 ┤ 轉信不必認證
  24. Password 預設為 空值 :SMTP 密碼 ┘ 此三行可不寫
  25. Timeout 預設為 10 :連結SMTP伺服器,多久算逾時判定為連不上。
  26. SMTPDebug 預設為 空值 :設定smtp物件是否要debug
  27. SMTPKeepAlive 預設為 空值 :其值為真時,重置smtp物件
  28. smtp 預設為 空物件 :使用smtp寄信時,所生的smtp物件
  29. to 預設為 空陣列 :諸收件者
  30. cc 預設為 空陣列 :諸副本收件者
  31. bcc 預設為 空陣列 :諸密件副本收件者
  32. ReplyTo 預設為 空陣列 :諸回函地址
  33. attachment 預設為 空陣列 :諸附檔。
  34. CustomHeader 預設為 空陣列 :諸頭項。每一元素為一頭項,其[0]為:之前,其[1]為:之後。
  35. message_type 預設為 :信文型態。分plain(無交替部無附檔)、attachments(無交替部有附檔)、alt(有交替部無附檔)、alt_attachments(有交替部有附檔)
  36. boundary 預設為 空陣列 :諸boundary(分隔區)的唯一碼。
  37. language 預設為 空陣列 :現用語系諸錯誤訊息組成的陣列
  38. error_count 預設為 0 :發生錯誤數目
  39. LE 預設為 反斜n :換行字元

(四)丁丁調整:

以下兩組設定互斥:
維持「var $ContentType = "text/plain";」並加
$result .= sprintf("Content-Type: %s; charset=\"%s\"",
$this->ContentType, $this->CharSet); // by jj
  1. var $ContentType = "text/html";// 原值 "text/plain"
  2. 註解掉 #$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版

(一)方法一覽表:

  1. IsHTML(布林值) :信文型態,true時ContentType設為text/html,其他時ContentType設為text/plain
  2. IsSMTP() :使用 SMTP servers 寄信
  3. IsMail() :使用 php mail 函式寄信
  4. IsSendmail() :使用 sendmail 寄信
  5. IsQmail() :使用 sendmail 寄信,且位置在/var/qmail/bin/sendmail
  6. AddAddress(郵址,姓名) :加一位收件者,姓名可省略,預設為空字串
  7. AddCC(郵址,姓名) :加一位副本收件者
  8. AddBCC(郵址,姓名) :加一位密送副本收件者
  9. AddReplyTo(郵址,姓名) :加一位回函地址
  10. Send() :寄信,會依Mailer的值,決定用以下三種方法寄信。以CreateHeader()得頭,以CreateBody()得體。
  11. SendmailSend(頭,體) :用sendmail寄信,會由sendmail程式寄信
  12. MailSend(頭,體) :用php mail()函式寄信
  13. SmtpSend(頭,體) :載入class.smtp.php後,用SMTP寄信。
  14. SmtpConnect() :連接並登入SMTP伺服器
  15. SmtpClose() :關閉與SMTP伺服器的連結
  16. SetLanguage(語系名,語系檔路徑) :調用不同語系的錯誤訊息檔,無中文
  17. AddrAppend(收件寄件類別,郵址陣列) :將各類諸郵址編為字串。
  18. AddrFormat(名稱郵址陣列) :將郵址以phrase類別,編為 ○○○ 或 "○○○" 格式,其中○○○適當編為B或Q碼。註標0是郵址,註標1是名稱。
  19. WrapText(字串,折行長度,是否qp) :折行。預設非qp
  20. UTF8CharBoundary
  21. SetWordWrap() :對信文或信文的純文字部進行折行處理。
  22. CreateHeader() :建信的頭部,包含寄收件者、主旨。
  23. GetMailMIME
  24. CreateBody() :建信的體部,包含信文、附檔。
  25. GetBoundary(分區唯一碼,字集,內容型態,編碼方式) :造GetBoundary(分隔區),
  26. EndBoundary(分區唯一碼) :產生區結尾
  27. SetMessageType() :產生信文型態,有plain(無交替部無附檔)、attachments(無交替部有附檔)、alt(有交替部無附檔)、alt_attachments(有交替部有附檔)
  28. HeaderLine(名稱,值) :產生頭部之一行
  29. TextLine(值) :產生體部之一行
  30. AddAttachment(路徑檔名,二段檔名,編碼,MIME格式) :加一個附檔,二段檔名可省略,編碼預設為base64,MIME預設為application/octet-stream
  31. AttachAll() :將諸附檔組拼成字串
  32. EncodeFile(路徑檔名,編碼方式) :叫用encodestring將檔案編碼為字串,預設編碼方式為B即base64
  33. EncodeString(字串,編碼方式) :將字串編碼,預設為base64,其他尚有7bit,8bit,binary,quoted-printable等編碼。
  34. EncodeHeader(字串,類別) :將header判斷後自動編碼為B或Q,類別有phrase、comment、text三類,預設為text。
  35. HasMultiBytes
  36. Base64EncodeWrapMB
  37. EncodeQP(字串) :以qp編碼後依每74字元折行。
  38. EncodeQ(字串,類別) :將字串以qp編碼,類別有phrase、comment、text三類,預設為text。
  39. AddStringAttachment(字串,檔名,編碼,MIME類別) :派各附檔之諸屬性。本方法其實沒用到。
  40. AddEmbeddedImage(路徑檔名,cid,檔名,編碼,MIME類別):派信文用媒體附檔諸屬性。本方法其實沒用到。
  41. InlineImageExists() :查有無信文用媒體附檔。
  42. ClearAddresses() :清to屬性為空陣列。
  43. ClearCCs() :清cc屬性為空陣列。
  44. ClearBCCs() :清bcc屬性為空陣列。
  45. ClearReplyTos() :清replyto屬性為空陣列。
  46. ClearAllRecipients() :清to,cc,bcc屬性為空陣列。
  47. ClearAttachments() :清attachment屬性為空陣列。
  48. ClearCustomHeaders() :清CustomHeader屬性為空陣列。
  49. IsError() :傳回是否發生錯誤
  50. AddCustomHeader(字串) :加入一個頭項,將字串以「:」拆成兩個元素的陣列,再將此陣列加入CustomHeader為一元素。
  51. MsgHTML :
  52. _mime_types :
  53. set :
  54. getFile :
  55. SecureHeader :
  56. Sign :
    以下設為 private 方法
  57. SetError(錯誤訊息) :加設一項錯誤訊息,錯誤訊息代碼加1。
  58. RFCDate() :傳回星期幾,日月年時分秒+-時區
  59. ServerHostname() :傳回伺服器名
  60. Lang(語系名如en) :由語系名叫setlanguage方法調用不同的錯誤訊息檔
  61. FixEOL(字串) :將字串中的換行一律改成LE

(二)屬性一覽表:

  1. Priority 預設為 3 :信的優先等級,1 = High, 3 = Normal, 5 = low。
  2. CharSet 預設為 iso-8859-1 :字集,已被改為utf-8
  3. ContentType 預設為 text/plain :mime型態
  4. Encoding 預設為 8bit :編碼方式
  5. ErrorInfo 預設為 空值 :寄信時發生錯誤的原因
  6. From 預設為 root@localhost :寄件者郵址
  7. FromName 預設為 Root User :寄件者名稱
  8. Sender 預設為 空值 :回信郵址,如未指定(空值),通常就是寄件者
  9. Subject 預設為 空值 :主旨
  10. Body 預設為 空值 :信的內容
  11. AltBody 預設為 空值 :信內容的純文字交替格式段落
  12. WordWrap 預設為 0 :多少字才折行
  13. Mailer 預設為 mail :用SMTP、mail函式、sendmail
  14. Sendmail 預設為 /usr/sbin/sendmail:sendmail程式所在的位置
  15. PluginDir 預設為 :頭項值之一。
  16. Version 預設為 2.3 :頭項值之一,指示 phpMailer 的版本。
  17. ConfirmReadingTo 預設為 :頭項值之一。
  18. Hostname 預設為 空值 :可由使用者指定,使用者未指定時,可由ServerHostname()方法傳回Hostname。
  19. Host 預設為 localhost :指出 SMTP servers
  20. Port 預設為 25 :SMTP使用的port
  21. Helo 預設為 空值 :試連SMTP
  22. SMTPSecure 預設為 false :
  23. SMTPAuth 預設為 空值 :設true為打開 SMTP 認證┐ 多數情形下SMTP
  24. Username 預設為 空值 :SMTP 帳號 ┤ 轉信不必認證
  25. Password 預設為 空值 :SMTP 密碼 ┘ 此三行可不寫
  26. Timeout 預設為 10 :連結SMTP伺服器,多久算逾時判定為連不上。
  27. SMTPDebug 預設為 false :設定smtp物件是否要debug
  28. SMTPKeepAlive 預設為 false :其值為真時,重置smtp物件
  29. SingleTo 預設為 false :
  30. LE 預設為 "\r\n" :換行字元
    以上設為 public 以下設為 private
  31. smtp 預設為 NULL :使用smtp寄信時,所生的smtp物件
  32. to 預設為 空陣列 :諸收件者
  33. cc 預設為 空陣列 :諸副本收件者
  34. bcc 預設為 空陣列 :諸密件副本收件者
  35. ReplyTo 預設為 空陣列 :諸回函地址
  36. attachment 預設為 空陣列 :諸附檔。
  37. CustomHeader 預設為 空陣列 :諸頭項。每一元素為一頭項,其[0]為:之前,其[1]為:之後。
  38. message_type 預設為 空字串 :信文型態。分plain(無交替部無附檔)、attachments(無交替部有附檔)、alt(有交替部無附檔)、alt_attachments(有交替部有附檔)
  39. boundary 預設為 空陣列 :諸boundary(分隔區)的唯一碼。
  40. language 預設為 空陣列 :現用語系諸錯誤訊息組成的陣列
  41. error_count 預設為 0 :發生錯誤數目
  42. sign_cert_file 預設為 空字串
  43. sign_key_file 預設為 空字串
  44. sign_key_pass 預設為 空字串

四、5.23版

請見 作者說明文件