開發Xoops模組如有寄信功能可以使用Xoops的內建函數$xoopsMailer來寄信,相關的設定數值如下:
xoops 發送郵件的程式碼架構
$xoopsMailer =& getMailer();
// 選擇發送方式
// 方案 A - 用 email
$xoopsMailer->useMail();
// 方案 B - 用私人訊息 PM
$xoopsMailer->usePM();
// 定義郵件樣板路徑
$xoopsMailer->setTemplateDir(XOOPS_ROOT_PATH.'/language/'.$xoopsConfig['language'].'/mail_template/');
// 指定使用的郵件樣板名稱
// 方案 A - 純文字樣板
$xoopsMailer->setTemplate('contact_us.tpl');
// 方案 B - HTML 格式樣板 [註一]
$xoopsMailer->setTemplate('contact_us.html');
// 定義郵件樣板中的變數 變數要大寫
$xoopsMailer->assign('SITENAME', $xoopsConfig['sitename']);
$xoopsMailer->assign('ADMINMAIL', $xoopsConfig['adminmail']);
// 以 HTML 格式發送可以順便定義 CSS 路徑
$xoopsMailer->assign('CSS', XOOPS_ROOT_PATH.'/style.css');
// 寄送給哪些信箱
// 方案 A - 寄給指定的會員 需給予會員 uid
$xoopsMailer->setToUsers(new XoopsUser($user_id));
// 方案 B - 寄給整個群組 需給予群組 id
$member_handler =& xoops_gethandler('member');
$xoopsMailer->setToGroups($member_handler->getGroup($group_id));
// 方案 C - 寄給指定信箱
$xoopsMailer->setToEmails('lynn@hotmail.com');
// 方案 D - 寄給大量指定信箱
$xoopsMailer->setToEmails(array('lynn@hotmail.com', 'ray@hotmail.com', 'john@gmail.com'));
// 設定發送的信箱
// 偏好設定 - 一般設定 - 站長信箱 $xoopsConfig['adminmail']
$xoopsMailer->setFromEmail($xoopsConfig['adminmail']);
// 設定發送人名稱
// 偏好設定 - 一般設定 - 站台名稱 $xoopsConfig['sitename']
$xoopsMailer->setFromName($xoopsConfig['sitename']);
// 設定郵件主旨(標題)
$xoopsMailer->setSubject('信件標題');
// [註一] 使用HTML格式發送
$xoopsMailer->multimailer->isHTML(true);
// 發送郵件
if ( !$xoopsMailer->send() ) {
redirect_header('index.php', 2, "送信失敗");
} else {
redirect_header('index.php', 2, "送信成功");
}
按照以上的參數實際做個範例來測試看看:假設我們要做個通知管理員商品庫存為0的通知,而且是批次郵件通知,可以吧$xoopsMailer函數function起來丟到function.php裡面用foreach來跑批次寄送!
//傳入-商品ID-發送群組-商品標題
function shopamountmail($productid="",$getGroupid="",$title=""){
global $xoopsConfig,$xoopsMailer;
$_url = XOOPS_URL . '/modules/neilshop/admin/product.php?op=product1&productid=' .$productid;
$xoopsMailer = & xoops_getMailer();
$xoopsMailer->addHeaders("MIME-Version: 1.0");
$xoopsMailer->useMail();
$member_handler =& xoops_gethandler('member');
$xoopsMailer->setToGroups($member_handler->getGroup($getGroupid));
$xoopsMailer->setFromEmail($xoopsConfig['adminmail']); //指定站長信箱
$xoopsMailer->setFromName($xoopsConfig['sitename']);
$xoopsMailer->setSubject(sprintf("%s "._MAIL_TEXT01."", $title));
$xoopsMailer->setBody(sprintf("%s "._MAIL_TEXT02." %s", $title, $_url));
$xoopsMailer->send();
}
//判斷商品數量
function shopamount(){
$dbneme="neilshopproductcontent";
$where=" where `amount` = '0' and `productstatus` != 'notshelves' order by productid DESC";
$amountArr=databasetablewhile($dbneme,$where);
foreach($amountArr as $key=> $val){
$setvar="set productstatus='notshelves' where productid='".$amountArr[$key]['productid']."'";
update($dbname="neilshopproductcontent",$set=$setvar);
//郵件通知函數
shopamountmail($productid=$amountArr[$key]['productid'],$getGroupid="1",$title=$amountArr[$key]['productidtitle']);
}
}
xoops 發送郵件的程式碼架構
$xoopsMailer =& getMailer();
// 選擇發送方式
// 方案 A - 用 email
$xoopsMailer->useMail();
// 方案 B - 用私人訊息 PM
$xoopsMailer->usePM();
// 定義郵件樣板路徑
$xoopsMailer->setTemplateDir(XOOPS_ROOT_PATH.'/language/'.$xoopsConfig['language'].'/mail_template/');
// 指定使用的郵件樣板名稱
// 方案 A - 純文字樣板
$xoopsMailer->setTemplate('contact_us.tpl');
// 方案 B - HTML 格式樣板 [註一]
$xoopsMailer->setTemplate('contact_us.html');
// 定義郵件樣板中的變數 變數要大寫
$xoopsMailer->assign('SITENAME', $xoopsConfig['sitename']);
$xoopsMailer->assign('ADMINMAIL', $xoopsConfig['adminmail']);
// 以 HTML 格式發送可以順便定義 CSS 路徑
$xoopsMailer->assign('CSS', XOOPS_ROOT_PATH.'/style.css');
// 寄送給哪些信箱
// 方案 A - 寄給指定的會員 需給予會員 uid
$xoopsMailer->setToUsers(new XoopsUser($user_id));
// 方案 B - 寄給整個群組 需給予群組 id
$member_handler =& xoops_gethandler('member');
$xoopsMailer->setToGroups($member_handler->getGroup($group_id));
// 方案 C - 寄給指定信箱
$xoopsMailer->setToEmails('lynn@hotmail.com');
// 方案 D - 寄給大量指定信箱
$xoopsMailer->setToEmails(array('lynn@hotmail.com', 'ray@hotmail.com', 'john@gmail.com'));
// 設定發送的信箱
// 偏好設定 - 一般設定 - 站長信箱 $xoopsConfig['adminmail']
$xoopsMailer->setFromEmail($xoopsConfig['adminmail']);
// 設定發送人名稱
// 偏好設定 - 一般設定 - 站台名稱 $xoopsConfig['sitename']
$xoopsMailer->setFromName($xoopsConfig['sitename']);
// 設定郵件主旨(標題)
$xoopsMailer->setSubject('信件標題');
// [註一] 使用HTML格式發送
$xoopsMailer->multimailer->isHTML(true);
// 發送郵件
if ( !$xoopsMailer->send() ) {
redirect_header('index.php', 2, "送信失敗");
} else {
redirect_header('index.php', 2, "送信成功");
}
按照以上的參數實際做個範例來測試看看:假設我們要做個通知管理員商品庫存為0的通知,而且是批次郵件通知,可以吧$xoopsMailer函數function起來丟到function.php裡面用foreach來跑批次寄送!
//傳入-商品ID-發送群組-商品標題
function shopamountmail($productid="",$getGroupid="",$title=""){
global $xoopsConfig,$xoopsMailer;
$_url = XOOPS_URL . '/modules/neilshop/admin/product.php?op=product1&productid=' .$productid;
$xoopsMailer = & xoops_getMailer();
$xoopsMailer->addHeaders("MIME-Version: 1.0");
$xoopsMailer->useMail();
$member_handler =& xoops_gethandler('member');
$xoopsMailer->setToGroups($member_handler->getGroup($getGroupid));
$xoopsMailer->setFromEmail($xoopsConfig['adminmail']); //指定站長信箱
$xoopsMailer->setFromName($xoopsConfig['sitename']);
$xoopsMailer->setSubject(sprintf("%s "._MAIL_TEXT01."", $title));
$xoopsMailer->setBody(sprintf("%s "._MAIL_TEXT02." %s", $title, $_url));
$xoopsMailer->send();
}
//判斷商品數量
function shopamount(){
$dbneme="neilshopproductcontent";
$where=" where `amount` = '0' and `productstatus` != 'notshelves' order by productid DESC";
$amountArr=databasetablewhile($dbneme,$where);
foreach($amountArr as $key=> $val){
$setvar="set productstatus='notshelves' where productid='".$amountArr[$key]['productid']."'";
update($dbname="neilshopproductcontent",$set=$setvar);
//郵件通知函數
shopamountmail($productid=$amountArr[$key]['productid'],$getGroupid="1",$title=$amountArr[$key]['productidtitle']);
}
}
去Gmail收信看看,的確有收到兩筆商品的缺貨通知,
信件內容也有帶到標題內文跟商品id
所以批次發信功能是有效的!!
不過要在Xoops模組中使用發信功能,除了$xoopsMailer函數要建立外,Xoops的->偏好設定->系統設定->電子郵件設定這裡也要輸入設定值才行,電子郵件分發方式必須為SMTPAuth,如果沒有smtp帳號可以使用Gmail的smtp功能來當作Xoops的發信郵件設定,之前有寫過一篇Xoops用Gmail當作smtp的設定教學有需要的朋友可以參考看看!!
教學撰寫:徐嘉裕 Neil hsu
留言
張貼留言