溫瑞烘老師的教學歷程檔案(Teaching ePortfolio) - 105-1-資料庫程式設計 - 第15週-註冊確認
 

資訊管理系
副教授
温瑞烘


歷程檔案 Portfolio


關於我 About Me

第15週-註冊確認

第十五週電子郵件確認信

 function display_send_page(){
    include("class.phpmailer.php");   
    include("class.smtp.php");  
    echo "<html><head><title> Email 測試(可以利用前端夾檔方式寄送)</title>
          <link rel='stylesheet' type='text/css' href='style.css'>
          </head>";
    $cname=trim($_POST["cname"]);
    $mailto=trim($_POST["mailto"]);
    $subject=trim($_POST["subject"]);
    $message=trim($_POST["message"]);
    $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 = "utf8"; //設定郵件編碼        
    $mail->Username = "xxx@gmail.com"; //設定驗證帳號        
    $mail->Password = "yyyy"; //設定驗證密碼        
    $mail->From = "xxx@gmail.com"; //設定寄件者信箱        
    $mail->FromName = $cname;  //設定寄件者姓名        
    $mail->Subject = $subject; //設定郵件標題        
    $mail->Body = $message;    //設定郵件內容   
    $attach_file=$_FILES["myfile"]["name"];  // 夾檔
    if ($attach_file!="") {
      $target="./ftp/$attach_file";                          // 上傳資料夾
      if (file_exists($target)) unlink($target);       // 以經存在刪除檔案
      if (!move_uploaded_file($_FILES["myfile"]["tmp_name"], $target)) { // 上傳 
         echo "<font color=red> <b>上傳檔案失敗,請檢查後再試</b></font>";
         die();
      }
      $mail->AddAttachment($target);   // 夾檔
    }   
    $mail->IsHTML(true);                   //設定郵件內容為HTML        
    $mail->AddAddress($mailto,$cname); //設定收件者郵件及名稱      
    if (!$mail->Send()) {        
      echo "$cname ---- $email ---- 寄信失敗! " . $mail->ErrorInfo;        
    } else {        
      echo "$cname ---- $email ---- 寄信成功!";      
    }    
  }
 
完成程式的第一個頁面

參考 :
http://cc.cust.edu.tw/~ven/infosend2.php


 請將前述程式完成後

              送到 ccs.cust.edu.tw/~s10214Dxxx/www/下執行

之後改寫為一個寄信程式,  可以被呼叫 以 GET方式傳送
 

一、資料表
DROP DATABASE IF EXISTS mydb; 
CREATE DATABASE mydb DEFAULT CHARACTER SET utf8; 
USE mydb;  
CREATE TABLE stmd (
  email     VARCHAR(40)     COMMENT  '電子郵件',
  name      VARCHAR(20)     COMMENT  '姓名',
  ccode     VARCHAR(128)    COMMENT  '識別碼',
  valid     CHAR(1)         COMMENT  'Y-可用',
  primary key(email)
);
 
二、程式結構
<?php
   include "config.php";
   $ccode=$_GET["ccode"];
   $command=$_POST["command"];
   if ($command=="" && ccode=="") {
      顯示第一個頁面 display_first_page($conn);
   }
   elseif ($command=="註冊") {
      顯示註冊頁面 display_register_page($conn);
   }
   elseif ($command=="" && ccode<>"") {
      顯示確認頁面 display_confirm_page($conn);
   }
?>
三, 範例程式 
 
 <?php
  include "config.php";
  $ccode=$_GET["ccode"];
  $email=$_GET["email"];
  $command=$_POST["command"];
  if ($command=="" && $ccode=="") {
    display_first_page($conn);
  }
  elseif ($command=="註冊") {
    display_register_page($conn);
  }
  elseif ($command=="" && $ccode<>"") {
    display_confirm_page($conn);
  }
  mysqli_close($conn);
 
  function display_first_page($conn) {
    echo "<html><body><center>
          <font color='red'><h1>
          註冊後系統會寄一封確認信至您的信箱,開啟信箱後直接點擊超連結確認成功才能啟用帳號<br>
          </h1></font><table border=1 bordercolor='black' width=100%>
          <form method='post' action=''>
          <tr><td bgcolor='#ccccff'>電子郵件帳號</td>
          <td><input type='text' name='email' size=50></td></tr>
          <tr><td bgcolor='#ccccff'>姓名</td>
          <td><input type='text' name='name' size=50></td></tr></table>
          <input type='submit' name='command' value='註冊'>
          </form></center></body></html>";
  }
  
  function display_register_page($conn) {
    $email=$_POST["email"]; 
    $name=$_POST["name"];
    if ($email=="" || $name=="") {
      echo "電子郵件與姓名欄不能空白,請回前頁重新輸入";
      die();
    }
    // 儲存電子郵件帳號與密碼
    $ccode=md5(uniqid(rand())); // 產生唯一的識別碼
    $sql="insert into stmd values('$email','$name','$ccode','') on duplicate key 
          update name='$name',ccode='$ccode' ";
    mysqli_query($conn,$sql);
    $filename=basename($_SERVER['PHP_SELF']);
    $message="xxxx君您好<br><br>";
    $message.="    請直接點擊下列超連結來確認此註冊信<br><br>";
    $message.="<a href='http://localhost/$filename?ccode=$ccode&email=$email' >
               http://localhost/$filename?ccode=$ccode&email=$email </a>";
    $subject = "註冊確認";
   
    $ok=sendmail($email,$subject,$message);
    if (!$ok) {
      echo "系統無法發送確認信至您的Email信箱,請稍候再試"; die(); 
    }
    echo "系統已經發送一封確認信至您的Email信箱<p>請立即開啟Email進行註冊確認";
  }
 
  function display_confirm_page($conn) {
    echo "完成此程式作確認動作, 首先 get email 與 ccode<br>
          再由stmd中查詢email並取出ccode與get出來的ccode比較<br>
          如果ccode一樣則將valid設為Y表示註冊確認成功";
    
  }
  
 ?>
 
四、由於 localhost無法寄信,必須利用ccs才能寄信,
    但ccs上沒有MySQL,因此,將資料庫的部分改成檔案
 
    範例程式 
 
 
 <?php
  $ccode=$_GET["ccode"];
  $mailto=$_GET["mailto"];
  $command=$_POST["command"];
  if ($command=="" && $ccode=="") {
    display_first_page();
  }
  elseif ($command=="註冊") {
    display_register_page();
  }
  elseif ($command=="" && $ccode<>"") {
    display_confirm_page();
  }
  
  function display_first_page() {
    echo "<html><body><center>
          <font color='red'><h1>
          註冊後系統會寄一封確認信至您的信箱,開啟信箱後直接點擊超連結確認成功才能啟用帳號<br>
          </h1></font><table border=1 bordercolor='black' width=100%>
          <form method='post' action=''>
          <tr><td bgcolor='#ccccff'>電子郵件帳號</td>
          <td><input type='text' name='mailto' size=50></td></tr>
          <tr><td bgcolor='#ccccff'>姓名</td>
          <td><input type='text' name='cname' size=50></td></tr></table>
          <input type='submit' name='command' value='註冊'>
          </form></center></body></html>";
  }
  
  function display_register_page() {
    global $mailto,$ccode,$cname,$subject,$message;
    $mailto=$_POST["mailto"]; 
    $cname=$_POST["cname"];
    if ($mailto=="" || $cname=="") {
      echo "電子郵件與姓名欄不能空白,請回前頁重新輸入";
      die();
    }
    // 儲存電子郵件帳號與密碼
    $ccode=md5(uniqid(rand())); // 產生唯一的識別碼
    $fp=fopen("test.txt","w");
    fputs($fp,$mailto); fputs($fp,"\r\n");  
    fputs($fp,$ccode); fputs($fp,"\r\n");  
    fclose($fp);
    $filename=basename($_SERVER['PHP_SELF']);
    $message="xxxx君您好<br><br>";
    $message.="    請直接點擊下列超連結來確認此註冊信<br><br>";
    $message.="<a href='http://ccs.cust.edu.tw/~s10214Dxxx/$filename?ccode=$ccode&mailto=$mailto' >
               http://ccs.cust.edu.tw/~s1021Dxxx/$filename?ccode=$ccode&mailto=$mailto </a>";
    $subject = "註冊確認";
    $ok=display_send_page();
    if (!$ok) {
      echo "系統無法發送確認信至您的Email信箱,請稍候再試"; die(); 
    }
    echo "系統已經發送一封確認信至您的Email信箱<p>請立即開啟Email進行註冊確認";
  }
 
  function display_confirm_page() {
    echo "完成此程式作確認動作, 首先 get email 與 ccode<br>
          再由stmd中查詢email並取出ccode與get出來的ccode比較<br>
          如果ccode一樣則將valid設為Y表示註冊確認成功";
    
  }
  
  function display_send_page(){
    global $mailto,$ccode,$cname,$subject,$message;
echo "mailto=$mailto<br>";
echo "message=$message<br>";
echo "ccode=$ccode<br>";
echo "cname=$cname<br>";
die();
    include("class.phpmailer.php");   
    include("class.smtp.php");  
    echo "<html><head><title> Email 測試(可以利用前端夾檔方式寄送)</title>
          <link rel='stylesheet' type='text/css' href='style.css'>
          </head>";
    $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 = "utf8"; //設定郵件編碼        
    $mail->Username = "xxx@gmail.com"; //設定驗證帳號        
    $mail->Password = "yyy"; //設定驗證密碼        
    $mail->From = "xxx@gmail.com"; //設定寄件者信箱        
    $mail->FromName = $cname;  //設定寄件者姓名        
    $mail->Subject = $subject; //設定郵件標題        
    $mail->Body = $message;    //設定郵件內容   
    $mail->IsHTML(true);                   //設定郵件內容為HTML        
    $mail->AddAddress($mailto,$cname); //設定收件者郵件及名稱      
    if (!$mail->Send()) {        
      return false;       
    } else {        
      return true;    
    }    
  }
 
 ?>
 

 
 
 
 

 
全部共 0則留言
登入帳號密碼代表遵守學術網路規範
 


文章分類 Labels

 


最新文章 Top10

中華科技大學數位化學習歷程 - 意見反應