羅德興老師的教學歷程檔案 - 107-2 資料庫系統實作 - 日四技資管三甲-Unit A- 寄信+註冊確認 (使用檔案非資料庫)
 

企業資訊與管理系
助理教授/日導
羅德興


歷程檔案 Portfolio

    日四技資管三甲-Unit A- 寄信+註冊確認 (使用檔案非資料庫)


    Unit A- 寄信+註冊確認 (使用檔案非資料庫)

    1. 以下兩支程式會使用到 gmail 的 SMTP, 故需準備好您 gmail 的帳密,且要將 其 
    帳戶存取權  變更為 低安全性應用程式 (參考本頁底下的 p.s.)
    2. 程式內使用 cc.cust.edu.tw/~dsluo 請改為 ccs.cust.edu.tw/~
    XXXXXX  (XXXXXX 為您的學號)
    3. 使用 PHPMailer 用 smtp 寄信
    (資料來源:http://heavenchou.buddhason.org/node/326) 
     
    SMTP 是簡單郵件傳輸協定(Simple Mail Transfer Protocol) ,這是在 Internet 上傳送 email 的一個協定,意思就是可以用它來寄信。
    安裝一個套件 PHPMailer 就可以在 PHP 使用 smtp 寄信。
    但若不是主機的擁有者,無法直接安裝此套件;
    只要複製幾個重要的檔案,就可以執行了。
      
    下載 PHPMailer
      
    PHPMailer 可在此下載
     
    https://github.com/PHPMailer/PHPMailer/releases
     
    可以選 PHPMailer 5.2.27 版。
     
    解壓縮後,取出這四個檔案:
     
    class.phpmailer.php
    class.pop3.php
    class.smtp.php
    PHPMailerAutoload.php
     
    在 php 程式碼的目錄中建一個子目錄,取名為 phpmailer,將這四個檔案放進去。


    一、第一支寄信程式,可命名為 infosend6.php

    <?php

    require_once("../phpmailer/PHPMailerAutoload.php");

     

    // 產生 Mailer 實體

    $mail = new PHPMailer();

    // 設定為 SMTP 方式寄信

    $mail->IsSMTP();

    // SMTP 伺服器的設定,以及驗證資訊

    $mail->Host = "smtp.gmail.com";

    $mail->Port = 465;

    $mail->SMTPAuth = true;

    $mail->SMTPSecure = 'ssl';

    // 信件內容的編碼方式       

    $mail->CharSet = "utf-8";

    // 信件處理的編碼方式

    $mail->Encoding = "base64";

    // SMTP 驗證的使用者資訊

    $mail->Username = "XXXXXX@gmail.com";  //mail的帳號(需要完整的mail帳號,含@後都要填寫)

    $mail->Password = "XXXXXX";  //密碼

    // 信件內容設定  

    $mail->From = "XXXXXX@gmail.com"; //需要與上述的使用者資訊相同mail

    $mail->FromName = "my-email  107XXXXXX"; //此顯示寄件者名稱

    $mail->Subject = "信件標題"; //信件主旨

    $mail->Body = "這是一封測試信!";   //信件內容

    $mail->IsHTML(true);

    // 收件人

    $mail->AddAddress("yyyy@yyy.yy.yyy.tw", "someone"); //此為收件者的電子信箱及顯示名稱

    // 顯示訊息

    if(!$mail->Send()) {

    echo "Mail error: " . $mail->ErrorInfo;     

    } else {

    echo "Mail sent";     

    }

    ?>


    二、第二支寄信+註冊確認 (使用檔案非資料庫) 程式,可命名為 infosend8.php

    <?php
    // 四、由於 localhost無法寄信,必須利用ccs才能寄信,
    //    但ccs上沒有MySQL,因此,將資料庫的部分改成檔案
    //    範例程式 
    require_once("../phpmailer/PHPMailerAutoload.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") 
        or die("無法開啟檔案 Unable to open file!");
        //向文件中寫入字符串
        // fwrite($myfile, "Hello World");
        fputs($fp,$mailto); fputs($fp,"\r\n");  
        fputs($fp,$ccode); fputs($fp,"\r\n");  
        fclose($fp);  // 關閉文件
        $filename=basename($_SERVER['PHP_SELF']);
        $message="$cname 君您好<br><br>";
        $message.="    請直接點擊下列超連結來確認此註冊信<br><br>";
        $message.="<a href='http://cc.cust.edu.tw/~dsluo/mydb/$filename?ccode=$ccode&mailto=$mailto' >
                   http://cc.cust.edu.tw/~dsluo/mydb/$filename?ccode=$ccode&mailto=$mailto </a>";
        $subject = "註冊確認";
    $m_ok = display_sendmail_page();
    if(!$m_ok) {
    echo "$cname 君,寄送郵件有誤!! Mail error: ";
    }
    else {
    echo "$cname 君,您的確認信已寄出! ";
    }
      }
     
      function display_confirm_page() {
        echo "完成此程式作確認動作, 首先 get email 與 ccode<br>
              再由stmd中查詢email並取出ccode與get出來的ccode比較<br>
              如果ccode一樣則將valid設為Y表示註冊確認成功";
        
      }

      function display_sendmail_page() {
        require_once("../phpmailer/PHPMailerAutoload.php");

     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="$cname 君,歡迎您加入 <br><br>";
        $message.="    請直接點擊下列超連結來確認此註冊信<br><br>";
        $message.="<a href='http://cc.cust.edu.tw/~dsluo/mydb/$filename?ccode=$ccode&mailto=$mailto' >
                   http://cc.cust.edu.tw/~dsluo/mydb/$filename?ccode=$ccode&mailto=$mailto </a>";
        $subject = "(標題) $cname 君 註冊確認";

    // 產生 Mailer 實體

    $mail = new PHPMailer();

    // 設定為 SMTP 方式寄信

    $mail->IsSMTP();

    // SMTP 伺服器的設定,以及驗證資訊

    $mail->Host = "smtp.gmail.com";

    $mail->Port = 465;

    $mail->SMTPAuth = true;

    $mail->SMTPSecure = 'ssl';

    // 信件內容的編碼方式       

    $mail->CharSet = "utf-8";

    // 信件處理的編碼方式

    $mail->Encoding = "base64"; // SMTP 驗證的使用者資訊
    $mail->Username = "XXXXXX@gmail.com";  //mail的帳號(需要完整的mail帳號,含@後都要填寫)
    $mail->Password = "XXXXXX";  //密碼

    // 信件內容設定  
    $mail->From = "XXXXXX@gmail.com"; //需要與上述的使用者資訊相同mail
    $mail->FromName = "my-email 107XXXX"; //此顯示寄件者名稱,您的學號
    $mail->Subject = "$subject"; //信件主旨
    $mail->Body = "$message";   //信件內容
    $mail->IsHTML(true);

    // 收件人
    $mail->AddAddress("$mailto", "$cname"); //此為收件者的電子信箱及顯示名稱

    // 顯示訊息
    if(!$mail->Send()) {
    echo "寄送郵件有誤!! Mail error: " . $mail->ErrorInfo;     
    return false;
    } else {
    return true;
    echo "Mail sent. 謝謝 $cname 君,您的確認信已寄出! ";     
    }
      }
    ?>




    p.s.
    變更低安全性應用程式的帳戶存取權

    為提升公司、學校或其他團體專用 Google 帳戶的安全性,我們會禁止部分低安全性應用程式存取 Google 帳戶。如果您嘗試登入這類型的帳戶,就會看到「密碼不正確」的錯誤訊息。這時有兩種解決方法:

    • 方法 1:安裝安全措施更縝密的高安全性應用程式。包括 Gmail 在內的所有 Google 產品皆採用最新安全措施。
    • 方法 2:變更您的設定,允許低安全性應用程式存取您的帳戶。提醒您,這麼做可能會導致帳戶遭入侵的風險升高,因此我們不建議採用這個方法。如果您仍要授予存取權,請按照下列步驟操作:
      1. 前往您的 Google 帳戶
      2. 按一下左側導覽面板上的 [安全性]。
      3. 在頁面底部的「低安全性應用程式存取權」面板上,按一下 [開啟存取權]。
        1. 如果系統未顯示這項設定,表示您的管理員可能已關閉低安全性應用程式帳戶存取權。
    全部共 4則留言
    05-06 14:36:http://ccs.cust.edu.tw/~s10514d077/
    05-06 21:11:出現 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting 應是 gmail 的設定問題,並非程式有誤。
    05-13 15:25:ok
    05-27 15:24:http://belleaya.pixnet.net/blog/post/27410978-%5B%E6%95%99%E5%AD%B8%5D-php-%E5%88%A9%E7%94%A8-phpmailer-%E9%80%8F%E9%81%8E-gmail-%E5%AF%84%E4%BF%A1
    登入帳號密碼代表遵守學術網路規範


    文章分類 Labels


    最新文章 Top10

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