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 版權歸原著作者所有.
留言列表