2009年8月18日

用PHP寄MAIL的方法

立得國際-舊屋翻新.代客尋屋的專家


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更有寫作的動力。

關閉線上 PHP 錯誤訊息提示功能

檢查 php.ini 檔中的 display_errors 的設定是否為

display_errors = on

如果是的話把它改成

display_errors = off

  然後再去 run 看看原本有問題的 PHP 程式,就不會再出現錯誤提示;我說明一下這個設定的用意好了,當 display_errors = on 時若 php 的程式有問題會把錯誤訊息顯示在瀏覽器供開發人員參考,這在開發時很有用,但當網站對外開放時,一般都會把這個功能關閉,因為php若遇嚴重錯誤時不管你有沒有開啟這個功能它都會顯示錯誤訊息,若遇不影響並中止php本身運行的小錯誤時,關閉這個功能並不會影響到 php 本身的運行,所以正式上線的 php 網站都會將這個功能關閉。

dw如何利用URL編碼傳遞中文字

不知道各位朋友是否有發現,如果利用URL參數傳遞中文字都會變成亂碼,進而造成程式錯誤,這個問題該如何解決呢?其實很簡單,其實可以用urlencode()函式解決,其方法如下:

只要你在 連結>>選取檔案時底下有個參數點下去就可以做出Go To Detail Page同等的效果而且在"值"的部分可以選取你想要的編碼方式,這樣就可以解決中文字亂碼的問題了,不過如果要取用被urlencode()函式編碼過的值,需用urldecode()函式解碼,才能還原編碼過的值,不過需注意用urlencode()函式編碼,英文跟數字是不會編碼的,如果想英文跟數字也能被編碼,可以考慮用Base64()函式編碼,不過Base64()函式dw並無內建需自行編寫程式碼,故在此不贅述之。

如果覺得這篇文章對您有所幫助,在觀看完文章之餘,希望能點選下方方廣告,當作是對YOGO的支持,讓YOGO更有寫作的動力。

dw中php如何亂數取得一筆資料

有想過隨機廣告是怎麼作的嗎?其實很簡單,就是每次頁面載入時,從資料庫亂數取出一筆資料,這樣即可達到隨機廣告的需求了,要怎麼作呢?且看我道來:

在資料集的進階的地方輸入如下的語法

SELECT * FORM tbads ORDER BY RAND() LIMIT 1

這樣每次都會從資料庫中亂數取出一筆資料,即可達到隨機廣告的需求了,不過此法法只適用於Mysql而已。

延伸閱讀:
挑戰Dreamweaver CS4互動網站百寶箱--使用PHP
挑戰PHP5/MySQL程式設計樂活學

如果覺得這篇文章對您有所幫助,在觀看完文章之餘,希望能點選下方方廣告,當作是對YOGO的支持,讓YOGO更有寫作的動力。

php的時間函式(date)應用

今天在Yahoo知識+看到一則討論,是關於"php如何把gmtime()的秒數譯成Y-m-d H:i:s"的問題(http://tw.knowledge.yahoo.com/question/question?qid=1009081801890),在討論中原發問者希望能將秒數轉換成data函式中的Y-m-d H:i:s格式,其實這部份並不難,php的date函式原本就有提供2個參數可供使用者使用,若省略第2個參數,date函數則會以server所在的時區的現在時間為基準,依所指定的格式輸出,而一般php初學者都只用第一個參數來輸出現在的時間格式,而不知道有第2個參數可用,所以很多初學php的朋友都以為date函式只能取的目前的時間,其實date函式的第2個參數就是要輸出格式化的時間參數,也就是說若有填第2個參數則date函式會依所填的時間去作指定的格式輸出,而非輸出現在的時間,以下為範例;

範例1:

echo date("Y-m-d H:i:s");
會輸出現在時間(2009-08-18 14:48:52)


範例2:

echo date('Y-m-d',time(1242974613));
會輸出2009-08-18 06:50:53而非現在時間


以下為php的date含式的原型,給各位朋友參考一下

string date ( string $format [, int $timestamp ] )

http://tw.php.net/manual/en/function.date.php


延伸閱讀:
PHP函數參考大全

如果覺得這篇文章對您有所幫助,在觀看完文章之餘,希望能點選下方方廣告,當作是對YOGO的支持,讓YOGO更有寫作的動力。

聖誕跑趴歡樂降★韓版假兩件針織連衣裙$890,新款顯瘦棒球服連帽風衣外套下殺$510,冬新款歐美棉襖棉服連帽短款外套限量↘$530,秋冬新款韓版大碼毛領氣質毛料外套↘$680,快上左耳貓網路購物

您好!如圖太小看不清楚,請 點選此處 看詳細內容 左耳貓蝦皮賣場 https://shopee.tw/hrf5168 左耳貓 露天賣場 http://class.ruten.com.tw/user/index00.php?s=starbox 左耳貓粉...