最近在做會員系統的驗證,剛好碰到要用Mail來寄出驗證信,在請求Google大神之後,得知了PHPMailer這套PHP套件
PHPMailer官方網站:http://phpmailer.worxware.com/
而套件的下載處:https://github.com/Synchro/PHPMailer
(右下角有個Download ZIP)
下載後解壓縮後,該如何使用Gmail寄出呢?
在官網很貼心地寫了份範例給我們使用者參考
參考資料:http://phpmailer.worxware.com/index.php?pg=examplebgmail
重點:由於通訊協定是走SSL,所以PHP的SSL功能要開啟,在php.ini裡「;extension=php_openssl.dll」這段,把字串前的分號「;」拿掉,在重新啟動Apache Web Server
(可用phpinfo();函式檢查有否開啟此功能)
而本人也實作了一份,供各位讀者參考(這裡是示範客戶建議聯絡表單),示範程式碼及示意圖如下:
「contect.php」
<meta http-equiv="content-type" charset="utf-8" />
<title>留言給我們</title>
<form id="form1" name="form1" method="post" action="sendmail.php">
<fieldset>
<legend>留言給我們</legend>
<label>您的大名:</label>
<input id="C_name" name="C_name" type="text" />
<br />
<label>您的Email:</label>
<input id="C_email" name="C_email" type="text" />
<br />
<label>您的電話號碼:</label>
<input id="C_tel" name="C_tel" type="text" />
<br />
<label>您的寶貴意見:</label>
<textarea id="C_message" name="C_message"></textarea>
<br />
<input id="submit" name="submit" type="submit" value="確定送出" />
</fieldset>
</form>
光有表單是不夠的,還需要一份驅動文件(官方範例修改)
這裡與範例不同的地方在,require_once是要去抓取PHPMailerAutoload.php
在程式碼裡,需要改的地方有Gamil帳號、Gamil密碼,而寄件者信箱跟寄件者姓名,則是選擇性的
但要是沒填寫,在寄件者信箱系統會自動抓取寄件的mail位置,而寄件者姓名則會顯示Root User
示範程式碼如下:
「sendmail.php」
<?php
require_once('./phpmailer/PHPMailerAutoload.php');
$C_name=$_POST['C_name'];
$C_email=$_POST['C_email'];
$C_tel=$_POST['C_tel'];
$C_message=$_POST['C_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主機的埠號(Gmail為465)。
$mail->CharSet = "utf-8"; //郵件編碼
$mail->Username = "XXXX@gmail.com"; //Gamil帳號
$mail->Password = "XXXXX"; //Gmail密碼
$mail->From = "XXXX@gmail.com"; //寄件者信箱
$mail->FromName = "XXXX"; //寄件者姓名
$mail->Subject ="來自".$C_name."留言"; //郵件標題
$mail->Body = "姓名:".$C_name."<br />信箱:".$C_email."<br />電話:".$C_tel."<br />回應內容:".$C_message; //郵件內容
$mail->IsHTML(true); //郵件內容為html
$mail->AddAddress("$C_email"); //收件者郵件及名稱
if(!$mail->Send()){
echo "Error: " . $mail->ErrorInfo;
}else{
echo "<b>感謝您的留言,您的建議是我們前進的動力。</b>";
}
?>
在表單案送出後,會跳出是否成功,成功則顯示您設定的訊息,失敗則會出現錯誤訊息,示意圖如下:
在寄出後,可到信箱去收取看看是否有收到信件: