:::

14-5 寄發通知信

  1. 基本上,在windows下寄信得先設定一下。

一、UniForm Server的寄信設定

  1. 如果您用的是XUniForm Server,我們可以透過Gmail來讓網站可以寄信。
  2. 您可以開啟控制台,選擇「General→Mail utility msmtp」來進行寄信設定。
  3. 開啟後,右邊下拉選單可先選擇「Gmail」,然後點選「Edit configuration File」來編輯設定檔。
  4. 開啟後,找到Gmail的設定部份,請如下圖輸入您的Gmail帳號及密碼(請將中文字的部份以實際資料替換掉)
  5. 接著拉到檔案最下方,確認預設用的是Gmail來寄信(若不是,請手動修改之)
  6. 最後請按「Ctrl+S」來儲存設定檔。
  7. 然後可以透過這個設定畫面來測試寄信功能是否正常:
  8. 順利的話,應該就可以收到信件了!
  9. 實際使用時,Google會要求 [允許安全性較低的應用程式] 設定處於啟用狀態,如此才收得到信。

二、寄信函數

  1. 在PHP中,寄信的函數是mail(),不過要寄出一封可以支援網頁語法的信需要較多設定,所以,我們自己另做一個函數(放在 fintion.php 中):
    //寄信
    function send_mail($to, $subject, $message, $from)
    {
        if ($to and $subject and $message) {
            $headers = "MIME-Version: 1.0\r\n" .
                "Content-type: text/html; charset=utf-8\r\n" .
                "From: {$from}\r\n";
    
            mail($to, $subject, $message, $headers);
        }
    }
    
  2. 其中 $headers 就是告知收信軟體這封信是有支援網頁語法的檔頭。

  3. 最後,只要在報名完,順便寄個通知信即可:

    //報名
    function signup($action_id)
    {
        global $db;
    
        $uid = $_SESSION['uid'];
    
        $sql = "INSERT INTO `signups` ( `action_id`, `uid`, `signup_date`)
        VALUES ('{$action_id}', '{$uid}', NOW())";
        if (!$db->query($sql)) {
            throw new Exception($db->error);
        }
    
        $sql    = "SELECT * FROM `actions` where `action_id` ='{$action_id}'";
        $result = $db->query($sql);
        if (!$result) {
            throw new Exception($db->error);
        }
        $action = $result->fetch_assoc();
    
        $_SESSION['uid_signup'][] = $action_id;
    
        $admin_email = "tad@tn.edu.tw";
        $message     = "<div>{$_SESSION['name']} 您好:</div><p>您已成功報名「{$action['title']}」活動。</p>";
        send_mail($_SESSION['email'], "「{$action['title']}」已報名通知", $message, $admin_email);
        send_mail($admin_email, "「{$action['title']}」已報名通知", $message, $admin_email);
    }
  4. 其中,我們用了 $_SESSION['email'],但實際上此變數不存在,所以,我們在login()登入時順便加個 $_SESSION['email']:

    if (password_verify($pass, $data['pass'])) {
        $_SESSION['group'] = $data['group'];
        $_SESSION['name']  = $data['name'];
        $_SESSION['uid']   = $data['uid'];
        $_SESSION['email'] = $data['email'];
    
        //抓取該使用者已報名的活動編號
        $sql = "SELECT action_id FROM `signups` where `uid`='{$data['uid']}'";
        if (!$result2 = $db->query($sql)) {
            throw new Exception($db->error);
        }
        $_SESSION['uid_signup'] = [];
        while (list($action_id) = $result2->fetch_row()) {
            $_SESSION['uid_signup'][] = $action_id;
        }
    
    } else {
        throw new Exception("登入失敗!");
    }
  5. 當然,登出時也記得取消之

    //登出
    function logout()
    {
        unset($_SESSION['group']);
        unset($_SESSION['name']);
        unset($_SESSION['uid']);
        unset($_SESSION['uid_signup']);
        unset($_SESSION['email']);
    }

     

 

 

 

 


:::

書籍目錄

展開 | 闔起

https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D753

計數器

今天: 751751751
昨天: 3176317631763176
總計: 7450183745018374501837450183745018374501837450183