非常抱歉,關於部落格內 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 意見:
張貼留言