Flash 表單利用 PHP 寄信

Flash & PHP

最近的一個案子,要使用Flash做表單,填完表單後將資料送回公司的信箱。找到的資料有些零散,所以整理後記錄下來,以免忘了。

程式流程

因為Flash本身不能傳送mail,所以要利用Server端的程式來送,這邊用的是PHP及PHPMailer。而送信必須要有SMTP伺服器,可以自己架,但我找到另一個方法是利用Google 的Gmail所提供的SMTP伺服器來送。所以整個流程大致如下:

Flash表單送出資料 -> PHP接收資料 -> PHPMailer寄信 -> Gmail SMTP 轉寄 -> 目的信箱收到信件

Flash 的部份

//要接收flash表單資料的php
var php_url:String = "flashform.php";
//建立用來傳送資料的LoadVars物件
var vars:LoadVars = new LoadVars();

//要傳送的變數資料(vars.資料名稱 = 資料的值)
vars.action = "submitform";
vars.companyname = companyName_txt.text;

//開始傳送(如果不想跳出視窗,就不要設定第2個參數)
vars.send(php_url, "_blank");

PHP 的部份

設定php.ini,找到 extension=php_openssl.dll,把前面的分號拿掉(表示要使用)。

PHPMailer下載寄信程式。放到適當位置並引用。
require_once('phpmailer.php');

PHP接收資料

$companyname = $_POST['companyname'];

設定PHPMailer

$mail = new PHPMailer();
$mail->CharSet = "utf-8";
$mail->Encoding = "base64";
$mail->IsSMTP(); //使用SMTP寄信
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl"; //一定要用ssl
$mail->Host = "smtp.gmail.com"; // SMTP server
$mail->Port = 465;
$mail->From = "noreply@domain.com";
$mail->FromName = "noreply";
$mail->Subject = "信件標題";

//注意:這裡要用明文設定Gmail的帳號密碼,所以有可能被他人盜用
//如果你是用虛擬主機的不建議使用(或申請另一個Gmail)
$mail->Username = "******@gmail.com"; //gmail帳號
$mail->Password = "******"; //gmail密碼

//信件內容(把取得的表單資料存在這裡)
$body = "<h2>客戶需求</h2><hr/>"
. "公司名稱: " . $companyname . "<br />"

//IsHTML設為true才能用HTML格式化文件
$mail->IsHTML(true);
$mail->Body = $body;
//目的信箱
$mail->AddAddress("xxx@gmail.com", "xxx");

//判斷寄信是否成功
if(!$mail->Send()) {
echo "Error: 郵件寄送時發生錯誤.";
} else {
echo "Info: 郵件寄送成功.";
}
如果你在Flash中的send寫成下面這樣(不跳出視窗):
vars.send(php_url);
就看不到PHP中echo出來的資料。

中文亂碼問題

主要有3個地方要注意:
  1. php頁面的meta設定
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  2. PHPMailer的設定
    $mail->CharSet = "utf-8";
  3. php檔的儲存格式
    用記事本打開php檔,另存新檔,編碼選utf8然後儲存。
    或用Notepad++,選"格式"->編譯成utf-8碼然後儲存。
本文網址:http://blog.tonycube.com/2010/08/flashphp.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。