YOGO整理了一下,用PHP來發MAIL的方法給有需要的朋友參考一下
1.用PHP內建的mail()函式
一般在發信時入須要先設好您的mail-server,會有問題的大多是windows的系統.在使用這一個函式時如果出現找不到函式那就是您的mail-server相關設定沒有設好.您只要修改您的php.ini就可以了請找到這二行
SMTP = localhost ;
for win32 onlysendmail_from = [email protected] ;for win32 onlysmtp
必須要找一台可以提供relay的機器來發信有關主機請自己找相關文件.接下來我們開始談有關mail這一個函式在一封完整的信件中一定會有以下的幾個元件
1.收件人
2.主題
3.信件內容
以要發一封簡單的信件只要把值帶入mail()中就可以了。
例:
mail("收件人","信件主題", 信件內容[, 標頭]);
這樣即可,若須更詳細的說明可參考此篇文章(Mail函式講解 http://www.php5.idv.tw/modules.php?mod=books&act=show&shid=2516)
2.mb_send_mail
基本上mb_send_mail的用法與mail類似,只是mail函式必需隨這所使用的語言,適當地設定mail的檔頭部份所宣告的charset,以及檔頭部份、本文部份的編碼方式,但mb_send_mail可以自動進行這些處理,以下為mb_send_mail的原型與用法:
原型:
bool mb_send_mail ( string $to , string $subject , string $message [, string $additional_headers= NULL [, string $additional_parameter= NULL ]] )
用法:
mb_send_mail("收件人","信件主題", 信件內容[, 標頭]);
若需進一步資料請參閱:http://tw.php.net/manual/en/function.mb-send-mail.php
3.使用PHPMailer
在 PHP 中可以使用 mail() 函式進行信件的發送,但是前提是您必須使用一個不用驗證即可寄信的 SMTP。
如果您必須使用一個需要帳號、密碼來通過驗證的 SMTP,就不能使用 mail() 函式了。 如果您不想再額外的安裝 PEAR 函式庫,建議您可以採用 opensource 的類別:phpMailer。
phpMailer 官方網站http://phpmailer.codeworxtech.com/
您可以在此下載 phpMailer 的類別: http://phpmailer.codeworxtech.com/index.php?pg=sf&p=dl 建議您依據您使用的 PHP 版本來下載適合的類別。
下載完畢後請解壓縮到指定資料夾中, 其中重要的類別檔案為:, 請將這個檔案放置與寄發信件程式同一層。 以下為使用範例:
include("class.phpmailer.php"); //匯入PHPMailer類別
$mail= new PHPMailer(); //建立新物件
$mail->IsSMTP(); //設定使用SMTP方式寄信
$mail->SMTPAuth = true; //設定SMTP需要驗證
$mail->Host = "XXX.XXX.XXX.XXX"; //設定SMTP主機
$mail->Port = 25; //設定SMTP埠位,預設為25埠。
$mail->CharSet = "big5"; //設定郵件編碼
$mail->Username = "*********"; //設定驗證帳號
$mail->Password = "*********"; //設定驗證密碼
$mail->From = [email protected]; //設定寄件者信箱
$mail->FromName = "測試人員"; //設定寄件者姓名
$mail->Subject = "PHPMailer 測試信件"; //設定郵件標題
$mail->Body = "大家好, 這是一封測試信件! "; //設定郵件內容
$mail->IsHTML(true); //設定郵件內容為HTML
$mail->AddAddress(123@123, "test"); //設定收件者郵件及名稱
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
如此即可通過有驗證的SMTP了,另外phpMailer也可以透過Gmail 的SMTP 發信,其範例如下:
include("class.phpmailer.php"); //匯入PHPMailer類別
$mail= new PHPMailer(); //建立新物件
$mail->IsSMTP(); //設定使用SMTP方式寄信
$mail->SMTPAuth = true; //設定SMTP需要驗證
$mail->SMTPSecure = "ssl"; // Gmail的SMTP主機需要使用SSL連線
$mail->Host = "smtp.gmail.com"; //Gamil的SMTP主機
$mail->Port = 465; //Gamil的SMTP主機的SMTP埠位為465埠。
$mail->CharSet = "big5"; //設定郵件編碼
$mail->Username = "*********"; //設定驗證帳號
$mail->Password = "*********"; //設定驗證密碼
$mail->From = [email protected]; //設定寄件者信箱
$mail->FromName = "測試人員"; //設定寄件者姓名
$mail->Subject = "PHPMailer 測試信件"; //設定郵件標題
$mail->Body = "大家好,這是一封測試信件! "; //設定郵件內容
$mail->IsHTML(true); //設定郵件內容為HTML
$mail->AddAddress(123@123, "test"); //設定收件者郵件及名稱
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
一般來說這樣即可完成使用 Gmail 發信的動作了,但有幾個要注意的事項敘述如下:
1.其中要注意的是Gmail 的 SMTP主機固定位址是 smtp.gmail.com,必須使用 465 埠以 SSL 的方式來連線。
2.有許多朋友可能在測試時還是無法正確連線,若要使用 SSL 的方式進行連線,PHP 必須安裝 OpenSSL 的擴充程式,如此才能正確連線並使用 Gmail 執行寄信的動作。
相關資料可參考以下這3篇文章:
1.[PHP] 線上發信如何通過驗證的SMTP(使用PHPMailer)
http://www.dreamweaver.com.tw/?fid=7&viewtopic=29672
2.[PHP] 如何利用 Gmail 的SMTP 發信(使用PHPMailer)
http://www.dreamweaver.com.tw/?fid=7&viewtopic=29692
3.[PHP] 如何利用 Pchome 的SMTP 發信(使用PHPMailer)
http://blog.yogo.tw/2009/09/php-pchome-smtp-phpmailer.html
4.PHP安裝OPENSSL的方法
http://blog.yogo.tw/2009/08/phpopenssl.html
另外下面延伸閱讀推薦的內二本書對phpmailer有詳細的介紹,有興趣的朋友可參考一下。
延伸閱讀:
最新 PHP + MySQL + Ajax 網頁程式設計
PHP + Ajax 網頁模組隨學隨用
4.PEAR - PHP Mail and Mail_Mime
這個比較複雜,以下為相關教學,給有興趣的朋友參考看看
1.[PHP] 好用的 PEAR - PHP Mail and Mail_Mime
http://blog.wu-boy.com/2007/12/18/129/
2.[PHP]解決 PEAR::Mail_Mime 標題 UTF-8 亂碼問題(不能顯示)
http://blog.wu-boy.com/2008/10/01/524/
5.使用Zend_Mail透過Google GMail來寄信
使用Zend Framework所提供的Zend_Mail來寄信,指定的SMTP就是要透過Google的Gmail來寄信, 在使用這個範例之前,由於Gmail必須透過加密傳輸,所以請確認你已經為PHP安置好OpenSSL
範例:
require_once 'Zend/Mail.php';
require_once 'Zend/Mail/Transport/Smtp.php';
$config = array('auth' => 'login','username' => '你的帳號','password' => '******','ssl' => 'tls','port' => '587');
$transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);
$mail = new Zend_Mail('UTF-8');
$mail->setBodyText('This is the text of the mail.');
$mail->setFrom('[email protected]', 'Some Sender');
$mail->addTo('[email protected]', 'Shen');
$mail->setSubject('Zend Mail!');
$mail->send($transport);
參考資源:
Zend_Mail - how to use Zend_Mail_Transport_Smtp for googlemail.com
6.利用 php 裡面的 libcurl 方式,把資料傳到 gmail 去,讓 gmail 當你的 smtp
這裡下載 libgmailer
範例:
require("libgmailer.php");
$gmail_acc = "帳號@gmail.com";
$gmail_pwd = "密碼";
$my_timezone = "GMT +08:00";
$gmailer = new GMailer();
if ($gmailer->created) {
gmailer->setLoginInfo($gmail_acc, $gmail_pwd, $my_timezone);// $gmailer->setProxy("proxy.company.com");
if ($gmailer->connect()) {
// GMailer connected to Gmail successfully.
// Do something with it.
$to = "收件人@gmail.com";
$subj = "主題";
$body = "測試";
$gmailer->send($to, $subj, $body, $cc="", $bcc="", $mid="", $tid="", $files=0, $draft=false, $orig_df="", $is_html=0, $from="", $attachments = array());
} else {
die("Fail to connect because: ".$gmailer->lastActionStatus()."\n");}}
else {
die("Failed to create GMailer because: ".$gmailer->lastActionStatus()."\n");
}
以上為YOGO整理的一些方法,希望能對各位朋友有所幫助
延伸閱讀:
挑戰Dreamweaver CS4互動網站百寶箱--使用PHP
挑戰PHP5/MySQL程式設計樂活學
如果覺得這篇文章對您有所幫助,在觀看完文章之餘,希望能點選下方方廣告,當作是對YOGO的支持,讓YOGO更有寫作的動力。