1 頁 (共 1 頁)

[其它] 在phpBB2裡使用gmail 發信

發表於 : 2008-02-19 23:19
~倉木麻衣~
首先聲明, 這個方法僅適用於使用自己電腦架站的主機
租用的空間或標榜有支援curl模組的空間並不一定能用(000webhost雖有支援curl, 但並無法使用)

首先, 先到此處下載libgmailer 1.37版
下載方式:
點libgmailer.php進入後, 在Revision 1.37旁的download按滑鼠右鍵/另存新檔
在實際修改phpBB2 程式碼之前, 建議先做個小測試, 看看程式是否能正常執行
因此, 我們先選擇將libgmailer.php存到網站根目錄下(ex:C:\Appserv\www\)

接著修改php.ini檔, 啟用curl模組

代碼: 選擇全部

extension=php_curl.dll
修改完後, 請先將libeay32.dll、ssleay32.dll複製到Path搜尋路的其中一個路徑裡
(或直接放在windows 或 windows/system32目錄下)

然後重新啟動Apache

接著在網站根目錄下建立一個測試用的php檔(ex:test.php), 內容如下:
(注意:此處有用到iconv這類的轉換編碼模組, 所以請先確認自己的機器有啟用iconv)

代碼: 選擇全部

<?php
require("libgmailer.php");
$gmail_acc = "Gmail帳號@gmail.com";
$gmail_pwd = "Gmail密碼";
$my_timezone = "GMT +08:00";
$gmailer = new GMailer();
if ($gmailer->created) {
	$gmailer->setLoginInfo($gmail_acc, $gmail_pwd, $my_timezone);
	if ($gmailer->connect()) {
		// GMailer connected to Gmail successfully.
		// Do something with it.
		$to = "收件人的信箱位址";
		$subj = iconv("BIG-5", "UTF-8", "測試用信件");
		$body = iconv("BIG-5", "UTF-8", "libgmailer發信測試");

		$gmailer->send($to, $subj, $body, $cc="", $bcc="", $mid="", $tid="", $files=0, $draft=false, $orig_df="", $is_html=0, $from, $attachments = array());
	} else {
		die("Fail to connect because: ".$gmailer->lastActionStatus()."\n");
	}
} else {
	die("Failed to create GMailer because: ".$gmailer->lastActionStatus()."\n");
}
?>
$gmail_acc、$gmail_pwd 請修改成你自己的gmail帳號/密碼, 帳號部份請記得加上@gmail.com
準備完畢後, 就可以執行這個php程式, 看是否能收到信

註1.
在發信前, 建議先到要用來發信的Gmail帳號裡勾選「外寄郵件使用 Unicode (UTF-8) 編碼」
這樣可以確保寄到某些國外的主機時, 信件主旨及內容不會變成亂碼
(有些主機就算你已先用iconv將內容轉換成UTF-8, 還是一樣會變成亂碼, 因此建議勾選上述選項來解決這個問題)

註2.
只有系統是採用BIG-5編碼的機器才需要使用iconv或mbstring模組做轉編碼的動作
若系統(或測試用檔案)為UTF-8編碼,則不需再做轉碼的動作

註3.
相同的session只能寄一次信
若需要一直進行測試, 則必須每測完一次就重新開啟一個新的瀏覽器
否則第一次之後的信件將不會被寄出

假設測試結果沒有問題的話, 那麼就可以開始動手修改phpBB2程式了
首先, 請先將libgmailer.php複製到 includes/目錄下
#
#--------[ OPEN ]----------------
#
includes/emailer.php

#
#--------[ FIND ]----------------
#

代碼: 選擇全部

		// Send message ... removed $this->encode() from subject for time being
#
#--------[ AFTER, ADD ]----------------
#

代碼: 選擇全部

		//----------------------Gmail----------------------
		include_once($phpbb_root_path . 'includes/libgmailer.'.$phpEx);
		$gmail_acc = $board_config['smtp_username'];
		$gmail_pwd = $board_config['smtp_password'];
		$my_timezone = "GMT +08:00";
		$gmailer = new GMailer();
		if ($gmailer->created) {
			$gmailer->setLoginInfo($gmail_acc, $gmail_pwd, $my_timezone);
			if ($gmailer->connect()) {
				// GMailer connected to Gmail successfully.
				// Do something with it.
				$to = $to;
				$subj = ($lang['ENCODING'] == 'utf8') ? $this->subject : iconv($lang['ENCODING'], "UTF-8", $this->subject);
				$body = ($lang['ENCODING'] == 'utf8') ? $this->msg : iconv($lang['ENCODING'], "UTF-8", $this->msg);

				@$gmailer->send($to, $subj, $body, $cc="", $bcc="", $mid="", $tid="", $files=0, $draft=false, $orig_df="", $is_html=0, $from="", $attachments = array());
			} else {
				die("Fail to connect because: ".$gmailer->lastActionStatus()."\n");
			}
		} else {
			die("Failed to create GMailer because: ".$gmailer->lastActionStatus()."\n");
		}
		return true;
		//----------------------Gmail----------------------
#
#--------[ SAVE/COLSE ALL FILE ]----------------
#
# EoM

請記得要到系統管理控制台中, 將SMTP 使用者帳號/密碼設定成Gmail的帳號(含@gmail.com)/密碼
勾選「使用 SMTP 伺服器傳送電子郵件」, 「SMTP 伺服器網域名稱 」請填smtp.gmal.com
不填SMTP 伺服器名稱好像也可以, 因為就個人的理解, 這支程式並不是真的走SMTP

如果想改寄件人的名稱, 可以在gmail信箱裡的「設定/帳戶」做變更