最近的一個案子,要使用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個地方要注意:- php頁面的meta設定
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
- PHPMailer的設定
$mail->CharSet = "utf-8";
- php檔的儲存格式
用記事本打開php檔,另存新檔,編碼選utf8然後儲存。
或用Notepad++,選"格式"->編譯成utf-8碼然後儲存。
我要留言
留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。