<?php
// 自訂的表單字串處理函式
function mystrip($value){
  if (get_magic_quotes_gpc())         // 若有啟用 GPC
    $value = stripslashes($value);    // 則去除 PHP 加上的反斜線
  return $value;                      // 傳回處理結果
}


// 檢查電子郵件字串格式的函式
// 利用規則運算式檢查參數字串是否符合 xxx@xxx.xxx 的格式
// (.xxx) 的部份可以有多個
function verifyemail($email) {
  $pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*" .
             "@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$";
  if(eregi($pattern, $email))         // 若比對符合
    return true;                      // 即傳回 true
  else                                // 若比對不符合
    return false;                     // 即傳回 false
}


// 將多位元文字編碼以便放在電子郵件表頭的函式
// 後面的 sendmail() 函式中將會呼叫此函式
function encodeheader($str) {
  mb_internal_encoding('utf-8');      // 指定編碼格式為 utf-8
  return mb_encode_mimeheader($str);  // 將參數字串編碼後傳回
}


// 寄發電子郵件的函式
// 會員系統只會寄送『新會員認證』、『重設密碼』兩種郵件
// 前 2 個參數依序為收件人名稱、郵件信箱、
// 第 3 個參數為帳號啟動碼 (新會員認證)、或新密碼 (重設密碼)
// 第 4 個參數 $type 為 'reset' 表示是『重設密碼』
//                      'activated' 表示是『新會員認證』
function sendmail($name, $email, $data, $type = 'activate') {
  // 先依要寄的郵件種類
  // 設定郵件主旨及內文
  if($type == 'reset'){   // 若是要寄重設密碼郵件
    $subject = '旗標會員網站密碼';
    $mailtext = "親愛的「 $name 」：\n" .
                "本站已依您的要求，重設您的密碼。\n" .
                "請利用新密碼「 $data 」登入本網站。\n" .
                "並建議您登入網站後再修改為其它密碼。";
  }
  else {    // 若是要寄認證郵件
    $subject = '旗標會員網站認證信';
    $mailtext = "親愛的「 $name 」： 歡迎加入旗標會員網站！\n" .
                "請利用以下網址啟動您的帳號，才能完成註冊程序，" .
                "勿直接回覆此信。\n" .
                // 讀者測試時請先修改下列網址中的主機 IP 位址
                "http://192.168.0.142/Ch14/activate.php?code=$data" .
                "\n啟動成功後您的會員帳號即可立即使用。";
  }

  // 以下引用 PEAR::Mail 類別
  // 設定參數後建立 PEAR::Mail 物件
  require_once("Mail.php");
                                           // 讀者測試時, 請修改下列
  $params = array('host' => '192.168.0.5',  // 郵件伺服器
                  'auth' => true,           // 需要驗證
                  'username' => 'foo',      // SMTP 帳號
                  'password' => '123456');  // SMTP 密碼
  $mailer = &Mail::factory('smtp',$params); // 建立 PEAR:: Mail 物件

  // 使用 PEAR::Mail 寄信的表頭參數陣列
  $headers = array(
    'From'          => encodeheader('旗標會員網站') .
                       ' <service@flag.com.tw>',
    'To'            => $email,
    'Subject'       => encodeheader($subject),
    'Content-Type'  => "text/plain; charset=\"UTF-8\"",
    'Content-Transfer-Encoding' => '8bit');
  // 寄出郵件
  $result = $mailer->send($email, $headers, $mailtext);

  if(PEAR::isError($result))  // 寄件失敗傳回 false
    return false;
  else                        // 寄件成功傳回 true
    return true;
}


// 建立新密碼的函式
// 當使用者忘記密碼時, 可利用密碼提示功能
// 由系統 (Reset.php) 產生一組密碼給使用者
function createpass() {
  // $chars 為含所有英文字母及數字的字串
  $chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
  $newpass = '';

  // 以迴圈建立長度為 5 個字元的密碼
  // 利用 (rand() % 35) 可得到 0～34 之間的任意數字
  // 如此即可每次由 $chars 中隨機取出一個字元
  for($i=0;$i<5;$i++)
    $newpass .= substr($chars, rand() % 35, 1);

  return $newpass;      // 傳回隨機產生的字串
}
?>
