PHP 內附的 mail() 雖然用起來很方便了,但是還是有某些功能上的限制,例如:夾帶檔案、寄送 HTML 時內嵌圖檔等等,這時就需要借助 PEAR Mail了。

PEAR Mail 有兩個基本的 classes 可以使用:


Mail         傳送 email 的介面
Mail_Mime    用來產生 multipart messages

Mail 的部分:

  使用 Mail 類別來寄信需要兩個步驟:
  1.利用 factory() 這個方法來產生即時的後端程式連結。
  2.使用 send() 寄送郵件。

  Mail::Factory()
  語法:mixed &factory (string $backend [, array $param = array()])
  $backend   後端程式的類型,有三種:"mail","smtp","sendmail"。
  $param     後端程式所需的參數。說明如下
             mail       不需參數
             sendmail   $param["sendmail_path"]    sendmail 程式所在路徑
                        $param["sendmail_args"]    sendmail 程式所需參數
             smtp       $param["host"]             SMTP 伺服器位置
                        $param["port"]             SMTP 連接埠
                        $param["auth"]             SMTP 是否使用認證
                        $param["username"]         SMTP 認證使用者
                        $param["password"]         SMTP 認證密碼

  Mail_*::send()
  語法:mixed send (mixed $recipients, array $headers, string $body)
  $recipients    收件人
  $headers       檔頭
  $body          內文

  寄送範例:
  include('Mail.php');
  $recipients = 'joe@example.com';
  $headers['From']    = 'richard@phpguru.org';
  $headers['To']      = 'joe@example.com';
  $headers['Subject'] = 'Test message';
  $body = 'Test message';
  $mail_object =& Mail::factory('mail');
  $mail_object->send($recipients, $headers, $body);


Mail_Mime 的部分:

  Mail_Mime 這個類別的最主要功用,就是用來產生 multipart messages。
  使用 Mail_Mime 製作出 multipart messages 之後,再使用 Mail::send() 來傳送。
  產生 multipart messages 的步驟有:
  1.使用 Mail_mime() 建立新的 Mail_mime 物件(constructor)。
  2.至少要使用 setTXTBody(), setHTMLBody(), addHTMLImage() 或 addAttachment()
    四者其中之一建立內文或附檔。(當然通常的情況不只使用一個囉)
  3.使用 get() 傳回內文。
  4.使用 headers() 傳回檔頭。
  5.利用傳回的內文與檔頭丟給 Mail::send() 送信。

  Mail_mime::Mail_mime() 用來產生一個新的 Mail_Mime 物件。
  語法:Mail_mime Mail_mime ([string $crlf = "\r\n"])
  $crlf 通常可以不用指定。

  Mail_mime::setTxtBody() 設定郵件中的純文字部分。
  語法:mixed setTxtBody (string $data [, boolean $isfile = false])
  $data 可以是檔名或字串

  Mail_mime::setHTMLBody() 設定郵件中的超文件部分。
  語法:mixed setHTMLBody (string $data [, boolean $isfile = false])
  $data 可以是檔名或字串。

  Mail_mime::addHTMLImage() 內嵌圖檔於超文件之中。
  語法:mixed addHTMLImage (string $data,
                            string [$c_type = 'application/octet-stream']
                            [, string $name = '' [, boolean $isfile = true]])
  $data    可以是圖檔檔名或本身就是圖檔資料。
  $c_type  圖檔的檔案類型,通常不用改。
  $name    圖檔的檔名,只有在 $data 本身是圖檔資料時使用。

  Mail_mime::addAttachment() 夾帶檔案。
  語法:mixed addAttachment (string $data,
                             string [$c_type = 'application/octet-stream'],
                             string [$name = ''], boolean [$isfile = true],
                             string [$encoding = 'base64'])
  $data, $c_type, $name 同 addHTMLImage() 的說明。
  $encoding 可以指定附加檔所使用的編碼方法,內定 base64。

  Mail_mime::&get() 傳回 Mail::send() 用來送信所需的內文($body)。
  語法:string &get (array [$param = null])
  注意~必須已經有加入內文或附檔才可呼叫 get()。
  $param["text_encoding"]    純文字的編碼方法。
  $param["html_encoding"]    超文件的編碼方法。
  $param["7bit_wrap"]        指定每行最多字元數。
  $param["text_charset"]     指定純文字的字元編碼。
  $param["html_charset"]     指定超文件的字元編碼。
  $param["head_charset"]     指定檔頭的字元編碼。

  Mail_mime::&headers() 傳回 Mail::send() 用來送信所需的檔頭($headers)。
  語法:array &headers ([array $headerEx = null])
  注意~必須呼叫過 get() 才可呼叫 headers()。
  $headerEx 為額外的檔頭。

  寄送範例:
  include('Mail.php');
  include('Mail/mime.php');
  $text = 'Text version of email';
  $html = '<html><body>HTML version of email</body></html>';
  $file = '/home/richard/example.php';
  $crlf = "\r\n";
  $param['text_charset'] = 'big5';
  $param['html_charset'] = 'big5';
  $param['head_charset'] = 'big5';
  $hdrs = array(
                'From'    => 'you@yourdomain.com',
                'Subject' => 'Test mime message'
                );
  $mime = new Mail_mime($crlf);
  $mime->setTXTBody($text);
  $mime->setHTMLBody($html);
  $mime->addAttachment($file, 'text/plain');
  $body = $mime->get($param);
  $hdrs = $mime->headers($hdrs);
  $mail =& Mail::factory('mail');
  $mail->send('postmaster@localhost', $hdrs, $body);

全文轉貼至 http://blog.xuite.net/noi1/yamesz/8928129 版權歸原著作者所有.


    全站熱搜

    Frank 發表在 痞客邦 留言(0) 人氣()