非常抱歉,關於部落格內 PHP 的部分目前已經停止維護,因本人已經很久沒有寫 PHP ,且文章中所使用的 PHP 版本偏舊,希望有心學習 PHP 的朋友們,可以參考 Codecademy 的課程,或近一步嘗試 Laravel 這個 PHP 框架(可透過 laracasts 學習),若有找不到錯的學習資源也歡迎在留言串分享,方便有需要的人能夠有更多學習的管道!
在上一堂課中,我們會學習如何利用PHP中的Mail功能,來做到自動發送電子郵件的功能,在這堂課中,我們要使用相同的功能,搭配上資料的讀取,建立一個電子報的發送系統。
fgets( ):讀取檔案內容
feof( ):當文字檔讀到最後的時候
while( ){ }:當...則跑...
feof( ):當文字檔讀到最後的時候
while( ){ }:當...則跑...
建立電子報發送系統
版面設計
我們同樣利用HTML和Bootstrap寫一個基本的版面
語法如下:
<html xmlns="https://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>電子報發送系統</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"> <style> .header{ font-size:24px; font-family:微軟正黑體; } .mail .container{ width:60%; } .mail .container .msg{ font-size:22px; font-family:微軟正黑體; } .attachment{ font-family:微軟正黑體; } </style> </head> <body> <div class="mail"> <div class="container"> <div class="header" style="text-align:center; font-size:24px; padding:30px 0"> 電子報發送系統 </div> <form id="msg" name="msg" method="post" action="" enctype="multipart/form-data" > <div class="form-group msg"> <label for="subject">信件主旨</label> <input type="text" class="form-control" id="subject" name="subject" placeholder="輸入主旨"> </div> <div class="form-group msg"> <label for="content">信件內容</label> <textarea class="form-control" id="content" name="content" rows="8"></textarea> </div> <div class="form-group attachment"> <label for="attachment">附加檔案</label> <input type="file" id="attachment"> </div> <div align="right"> <button type="submit" class="btn btn-default" >寄出</button> </div> </form> </div> </div> </body> </html>
建立收件者名單
我們把收件者的名單,全部存成一個txt檔
讀取收件者名單
我們利用fgets( )來讀取檔案的資料
這時候我們會發現,當我們使用一次gets時,會得到第一筆資料;當我第二次使用gets時,會得到第二筆資料。
透過迴圈的寫法,我們可以把所有的資料讀出來
但這樣子還是稍嫌不方便,因為我們必須知道我們的資料共有幾筆。
因此,我們可以利用一個新的語法,叫做feof( ),這個語法的意思是file end of file,也就是當檔案讀到最後的時候。
我們寫一個if指令:「當檔案讀到最後的時候,幫我停止迴圈」,停止迴圈的語法是break
這時候我們可以把我們for迴圈的終止值設成很大的一個數值,反正只要讀到檔案最後的時候,這個迴圈就會自動終止。
但是這種寫法還是稍嫌奇怪,最好的方式其實是使用while迴圈,while的意思是,當...則...
所以當我這樣寫的時候,意思是「當我檔案讀到最後,則幫我讀出檔案」
聽起來好像怪怪的,檔案都已經讀到最後了,怎麼還讀得出東西呢?
所以我們要在最前面加上一個!,這個的意思是把邏輯反過來的意思,所以意思會變成「當我還沒讀到最後,則幫我讀出檔案」,這時候就可以讀出所有的e-mail清單了!
所以,最後讀取檔案的語法如下:
<?php $SendList=fopen("p15.txt","r"); while(!feof($SendList)){ $receiver=fgets($SendList); echo $receiver; } fclose($SendList); ?>
結合自動發送系統
接著,結合上一堂課所學的自動發送系統<學習筆記 第14堂(自動發信、自動發送電子郵件)>,我們可以寫出如下的PHP語法:
<?php if(isset($_POST['content'])){ $sub=$_POST['subject']; $content=$_POST['content']; $SendList=fopen("p15.txt","r"); mb_internal_encoding("utf-8"); $subject=mb_encode_mimeheader("$sub","utf-8"); $message="$content"; $headers="MIME-Version: 1.0\r\n"; $headers.="Content-type: text/html; charset=utf-8\r\n"; $headers.="From:".mb_encode_mimeheader("此為自動發信","utf-8")."<pjchender@gmail.com>\r\n"; while(!feof($SendList)){ $receiver=fgets($SendList); $to=$receiver; mail($to,$subject,$message,$headers); echo $to."已寄送<br>"; } fclose($SendList); } ?>讓我們來試試看吧!
寄出
顯示寄給誰
收到信了
附加檔案功能
這個部分之後再來研究XD。
以上內容均為本人在馬老師雲端研究室學習所整理之筆記
0 意見:
張貼留言