/** * Looks up user supplied email address / alias and sends a mail * * @param $email email address or username */ function sendMail($in) { $in = trim($in); if (is_email($in)) { $user_id = UserFinder::byEmail($in); } else { $user_id = UserFinder::byUsername($in); } $error = ErrorHandler::getInstance(); if (!$user_id) { $error->add('Invalid email address or username'); return false; } $email = UserSetting::getEmail($user_id); if (!$email) { throw new \Exception('entered email not found'); } $code = Token::generate($user_id, 'activation_code'); $pattern = array('/@USERNAME@/', '/@IP@/', '/@URL@/', '/@EXPIRETIME@/'); $user = User::get($user_id); $page = XmlDocumentHandler::getInstance(); $url = $page->getUrl() . 'u/reset_pwd/' . $code; $replacement = array($user->getName(), client_ip(), $url, shortTimePeriod($this->expire_time_email)); $msg = preg_replace($pattern, $replacement, $this->password_msg); //d($msg); $mail = SendMail::getInstance(); $mail->addRecipient($email); $mail->setSubject('Forgot password'); $mail->send($msg); return true; }
/** * SMTP接続を開始する。 * * @param * * @return boolean */ public function openSmtpConnect() { // 未接続なら接続処理 if (!$this->smtp_conn) { $mailServerIpAry = array(); // IPが空ならデフォルトセット if (!$this->_smtpMailServerIp) { // デフォルト(通常) $this->setSendMailServerIp($this->_configOBJ->common_config->smtp_mail_server_ip->sendMagic); } // ホストとポートに分ける $mailServerIpAry = explode(":", $this->_smtpMailServerIp); // host $host = $mailServerIpAry[0]; // port $port = $mailServerIpAry[1]; // 接続先をセット $this->setSmtpHost($host, (int) $port); // 接続 try { // 接続出来なければ、リトライ(指定秒間隔) for ($cnt = 0; $cnt < $this->_retrySmtpConnCnt; $cnt++) { // 接続確立 if ($this->_openSmtpConn()) { break; } // 10秒インターバル sleep($this->_retrySmtpInterval); } // それもダメならさよなら。 if (!$this->getSmtpConnect()) { return false; } // 接続後、最初に必要なSMTPコマンドをここでやっちゃおう!! if (!$this->_sendSmtpCommand("helo " . $this->smtp_host, array(220, 250, 354))) { return false; } } catch (Zend_Exception $e) { // デバッグメール $SendMailOBJ = SendMail::getInstance(); $debugMail = ""; $debugMail["subject"] = "SMTP接続エラー"; $debugMail["text_body"][] = "file:" . __FILE__; $debugMail["text_body"][] = "line:" . __LINE__; $debugMail["text_body"][] = "err:" . $e->getMessage(); $debugMail["text_body"][] = "server_ip:" . $this->_smtpMailServerIp; $debugMail["text_body"] = implode("\n", $debugMail["text_body"]); // システムにエラーメール $SendMailOBJ->debugMailTo($debugMail); } } return true; }
} } // メール送信 // メール文言取得 $AutoMailOBJ = AutoMail::getInstance(); // 別途%変換用にセット $convAry = $OrderingOBJ->makeOrderConvertArray($orderingData); // キーコンバート用データの取得 $cvdKeyconvData = $SettlementCvdOBJ->getCvdKeyconvData(); $convAry["-%cvs_name-"] = $cvName; $convAry["-%pay_limit-"] = date("Y/m/d", strtotime($cvdKeyconvData["payLimit"])); $convAry["-%shno-"] = $cvdKeyconvData["shnoMailString"]; // リメールデータの取得 $mailAddress = $comUserData["mb_address"] ? $comUserData["mb_address"] : $comUserData["pc_address"]; $mailElementsData = $AutoMailOBJ->getAutoMailData("ordering", $cvdRemailKey, $mailAddress); $mailElements = $AutoMailOBJ->convertMailElements($mailElementsData["elements"], $comUserData["user_id"], $convAry); // メール送信 if (!$AutoMailOBJ->mailTo($mailElements, "", $mailElementsData["image_data"], $mailElementsData["image_type"])) { $SendMailOBJ = SendMail::getInstance(); $mailElements["subject"] = "コンビニダイレクト決済予約メール送信エラー"; $mailElements["text_body"] = "注文ID:" . $orderingData["id"] . "\n金額:" . $orderingData["pay_total"] . "\nユーザーにメール送信できませんでした。"; // システムにエラーメール $SendMailOBJ->debugMailTo($mailElements); // 運営にエラーメール $SendMailOBJ->operationMailTo($mailElements); $errSessOBJ->errMsg[] = "メール送信できませんでした。<br>お手数ですが、お問い合わせよりご連絡ください。"; header("Location: ./?action_SettleCvd=1&" . $URLparam . ($comURLparam ? "&" . $comURLparam : "") . "&" . $sessId); exit; } header("Location: ./?action_SettleCvdEnd=1&" . $URLparam . ($comURLparam ? "&" . $comURLparam : "") . "&" . $sessId . "&name1=" . $param["name1"] . "&name2=" . $param["name2"] . "&telno=" . $param["telno"]); exit;
/** * sendAffiliateDataメソッド * * アフィリエイトデータを送信。 * * @param interger $userId ユーザーID * @param array $aryAffiliateValue QUERY_STRINGの配列 * @param interger $sendType 送信種別 * @param interger $isSuccess 成功タグか失敗タグか * @return boolean * */ public function sendAffiliateData($userId, $aryAffiliateValue, $sendType, $isSuccess = true) { if (!$aryAffiliateValue or !$aryAffiliateValue["advcd"]) { return FALSE; } $UserOBJ = User::getInstance(); $userData = $UserOBJ->getUserData($userId); if (!$userData) { return FALSE; } // 過去に登録済みか if ($userData["pc_address"] and $UserOBJ->chkUserDataFromPcMailAddressDuplication($userData["pc_address"], $userId)) { return FALSE; } else { if ($userData["mb_serial_number"] and $UserOBJ->chkUserDataFromMbSerialNumberDuplication($userData["mb_serial_number"], $userId)) { return FALSE; } } // アフィリエイトデータの取得 $affiliateData = $this->getAffiliateDataFromAdvcd($aryAffiliateValue["advcd"], $sendType); // 成功時のみ発行の場合は失敗ならfalseを返す if (!$affiliateData or !$affiliateData["path"] or $affiliateData["is_success_only"] and !$isSuccess) { return FALSE; } $url = $affiliateData["path"]; /* if (!$aryAffiliateValue["from_first_payment"]) { // 成功パラメータを設定する if ($isSuccess AND $affiliateData["success_parameter"]) { $url .= (strpos($url, "?") ? "&" . $affiliateData["success_parameter"] : "?" . $affiliateData["success_parameter"]); // 失敗パラメータを設定する } else if ($affiliateData["failure_parameter"]) { $url .= (strpos($url, "?") ? "&" . $affiliateData["failure_parameter"] : "?" . $affiliateData["failure_parameter"]); } } else { // 初入金パラメータを設定する if ($affiliateData["first_payment_parameter"]) { $url .= (strpos($url, "?") ? "&" . $affiliateData["first_payment_parameter"] : "?" . $affiliateData["first_payment_parameter"]); $setUserParam["affiliate_tag_first_payment_status"] = 1; } else { return FALSE; } } */ if ($aryAffiliateValue["payment"]) { // 入金パラメータを設定する if ($affiliateData["payment_parameter"]) { $url .= strpos($url, "?") ? "&" . $affiliateData["payment_parameter"] : "?" . $affiliateData["payment_parameter"]; } else { return FALSE; } } else { if ($aryAffiliateValue["from_first_payment"]) { // 初入金パラメータを設定する if ($affiliateData["first_payment_parameter"]) { $url .= strpos($url, "?") ? "&" . $affiliateData["first_payment_parameter"] : "?" . $affiliateData["first_payment_parameter"]; $setUserParam["affiliate_tag_first_payment_status"] = 1; } else { return FALSE; } } else { // 成功パラメータを設定する if ($isSuccess and $affiliateData["success_parameter"]) { $url .= strpos($url, "?") ? "&" . $affiliateData["success_parameter"] : "?" . $affiliateData["success_parameter"]; // 失敗パラメータを設定する } else { if ($affiliateData["failure_parameter"]) { $url .= strpos($url, "?") ? "&" . $affiliateData["failure_parameter"] : "?" . $affiliateData["failure_parameter"]; } } } } // メールアドレス変数を作成する $userData["mail_address"] = $userData["pc_address"] ? $userData["pc_address"] : $userData["mb_address"]; // アドレス(「.」を「_」に変換)変数を作成する $userData["dot_address"] = str_replace(".", "_", rawurlencode($userData["mail_address"])); $returnValue = explode(",", $affiliateData["return_variable"]); $changeValue = explode(",", $affiliateData["change_variable"]); // 情報を変換する foreach ($returnValue as $key => $val) { if (!$affiliateData["connect_type"] == self::CONNECT_TYPE_IMG) { if ($changeValue[$key] == "payment") { $getData[] = $val . "=" . $aryAffiliateValue["payment"]; } else { $getData[] = $val . "=" . ($aryAffiliateValue[$changeValue[$key]] ? $aryAffiliateValue[$changeValue[$key]] : $userData[$changeValue[$key]]); } } else { if ($aryAffiliateValue[$changeValue[$key]]) { $affiliateValue = $aryAffiliateValue[$changeValue[$key]]; } elseif ($userData[$changeValue[$key]]) { $affiliateValue = $userData[$changeValue[$key]]; } else { $affiliateValue = $changeValue[$key]; } $getData[] = $val . "=" . $affiliateValue; } } $url = $url . (strpos($url, "?") ? "&" . implode("&", $getData) : "?" . implode("&", $getData)); // タグのデコードをする $url = htmlspecialchars_decode($url, ENT_QUOTES); $httpParam = array("maxredirects" => 1, "timeout" => 30); if ($affiliateData["connect_type"] == self::CONNECT_TYPE_SOCKET) { if (!$aryAffiliateValue["payment"]) { // 「初入金時」は更新カラム変更 if (!$aryAffiliateValue["from_first_payment"]) { $setUserParam["affiliate_tag_url"] = htmlspecialchars($url, ENT_QUOTES); } else { $setUserParam["affiliate_tag_first_payment_url"] = htmlspecialchars($url, ENT_QUOTES); } } else { //入金タグを配列に格納 $insertArray["affiliate_tag_url"] = htmlspecialchars($url, ENT_QUOTES); } $setUserParam["update_datetime"] = date("Y-m-d H:i:s"); $userWhere[] = "id = " . $userId; try { // ソケット通信 $ComHttpOBJ = new ComHttp($url, $httpParam); $result = $ComHttpOBJ->request("GET"); if ($result->isSuccessful()) { if (!$aryAffiliateValue["payment"]) { // 「初入金時」は更新カラム変更 if (!$aryAffiliateValue["from_first_payment"]) { $setUserParam["affiliate_tag_status"] = 1; } else { $setUserParam["affiliate_tag_first_payment_status"] = 1; } } } else { $SendMailOBJ = SendMail::getInstance(); $mailElements["subject"] = "アフィリエイトソケット通信エラー"; $mailElements["text_body"] = "ユーザーID:" . $userId . "\nurl:" . $url . "\n\n" . $result->getMessage(); // システムにエラーメール $SendMailOBJ->debugMailTo($mailElements); // 運営にエラーメール $SendMailOBJ->operationMailTo($mailElements); } } catch (Exception $e) { $SendMailOBJ = SendMail::getInstance(); $mailElements["subject"] = "アフィリエイトソケット通信エラー"; $mailElements["text_body"] = "ユーザーID:" . $userId . "\nurl:" . $url . "\n\n" . $e->getMessage(); // システムにエラーメール $SendMailOBJ->debugMailTo($mailElements); // 運営にエラーメール $SendMailOBJ->operationMailTo($mailElements); } if ($userId) { if ($aryAffiliateValue["payment"]) { $insertArray["user_id"] = $userId; $insertArray["media_cd"] = $aryAffiliateValue["advcd"]; $insertArray["create_datetime"] = date("Y-m-d H:i:s"); $insertArray["update_datetime"] = date("Y-m-d H:i:s"); //入金タグ関連のデータをpayment_parameter_logにインサート if (!$this->insertPaymentAffiliateTagLog($insertArray)) { $this->_errorMsg[] = "データ登録できませんでした。"; return FALSE; } } else { if (!$UserOBJ->updateUserData($setUserParam, $userWhere)) { $this->_errorMsg[] = "データ更新できませんでした。"; return FALSE; } } } return TRUE; } else { if ($affiliateData["connect_type"] == self::CONNECT_TYPE_IMG) { // アドレス部分をURLエンコードした値に置換 $address = $userData["dot_address"]; $encodeAddress = urlencode($address); $url = str_replace($address, $encodeAddress, $url); $this->_imgTag = "<img src=\"" . $url . "\" width=\"1\" height=\"1\">"; // DB格納する前にURLデコード //$tag = urldecode($this->_imgTag); // 「初入金時」は更新カラム変更 if (!$aryAffiliateValue["from_first_payment"]) { $setUserParam["affiliate_tag_url"] = htmlspecialchars($this->_imgTag, ENT_QUOTES); $setUserParam["affiliate_tag_status"] = 1; } else { $setUserParam["affiliate_tag_first_payment_url"] = htmlspecialchars($this->_imgTag, ENT_QUOTES); $setUserParam["affiliate_tag_first_payment_status"] = 1; } $setUserParam["update_datetime"] = date("Y-m-d H:i:s"); $userWhere[] = "id = " . $userId; if ($userId) { if (!$UserOBJ->updateUserData($setUserParam, $userWhere)) { $this->_errorMsg[] = "データ更新できませんでした。"; return FALSE; } } return TRUE; } } }
/** * mailToメソッド * * メール送信実行 * * @param string $mailAddress 送信するメアド * @param array $$mailElements 送信する要素 * [from_address]:メール送信元アドレス * [from_name] :メール送信元名(任意) * [return_path] :リターンアドレス(任意) * [subject] :メールタイトル * [text_body] :メール本文(テキスト) * [html_body] :メール本文(HTML)(任意) * @return 送信成功:True 送信失敗:False */ public function mailTo($mailElements, $sec = 0, $imageData = null, $imageType = null) { $SendMailOBJ = SendMail::getInstance(); return $SendMailOBJ->mailTo($mailElements, $sec, $imageData, $imageType); }
namespace cd; set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/../core/'); require_once 'core.php'; require_once 'SendMail.php'; // external MTA example /* $sendmail = SendMail::getInstance(); $sendmail->useMta(true); $sendmail->addRecipient('*****@*****.**'); $sendmail->setSubject('subj åöl'); $sendmail->send('helo world'); */ // Gmail example $mail = SendMail::getInstance(); //$mail->setDebug(true); $mail->setServer('smtp.gmail.com'); $mail->setUsername('gmail-username'); $mail->setPassword('password'); $mail->setPort(587); // TLS/STARTTLS $mail->setFrom('*****@*****.**', 'martin testar'); $mail->setReplyTo('*****@*****.**'); $mail->addRecipients(array('*****@*****.**', '*****@*****.**')); if (count($mail->getRecipients()) != 2) { echo "FAIL 1\n"; } $mail->setSubject('message åäö subject'); //$mail->attachFile('/home/ml/Desktop/bilder/167968_193900863954437_140855739258950_730662_4411055_n.jpg'); $msg = 'abc åäö 123';
/** * convertMailElementsメソッド * * メールタイトル、文言、HTML等の%変換処理を実施 * * @param array $contents メールコンテンツ * @param integer $userId 送信相手のUserテーブルID * @param array $convertAry %変換用配列(個別処理用) * @return array 変換済みメール要素配列 */ public function convertMailElements($elements, $userId = "", $convertAry = "") { $SendMailOBJ = SendMail::getInstance(); return $SendMailOBJ->convertMailElements($elements, $userId, $convertAry); }
/** * sendToBitcashメソッド * * bitcashサーバーと通信をする * ├カード認証 * └決済実行 * * @param array $orderingData 注文データ * @param string $card_number カード番号(ひらがな16文字) * * @return array $result ビットキャッシュからの戻り値 * */ function sendToBitcash($orderingData, $cardNumber) { if (!$orderingData or !$cardNumber) { return FALSE; } $ComXmlRpcClientOBJ = new ComXmlRpcClient(self::BITCASH_URL); try { $ComXmlRpcClientOBJ->setSkipSystemLookup(true); $proxy = $ComXmlRpcClientOBJ->getProxy("Settlement"); /* ■■■■■■■■■ * バリデートロジック * ■■■■■■■■■ * ビットキャッシュ側にカード、金額データを送信して * チェックを行う。 */ $validateParam["SHOP_ID"] = self::BITCASH_SHOP_ID; $validateParam["SHOP_PASSWD"] = self::BITCASH_SHOP_PASS; $validateParam["CARD_NUMBER"] = $cardNumber; $validateParam["RATING"] = self::BITCASH_RATING; $validateParam["PRICE"] = $orderingData["pay_total"]; $validateParam["ORDER_ID"] = $orderingData["id"]; $validateParam = Zend_XmlRpc_Value::getXmlRpcValue($validateParam, Zend_XmlRpc_Value::XMLRPC_TYPE_STRUCT); $validateResult = $proxy->validate_card($validateParam); if (!$validateResult) { $this->_errorMsg = "validate_card_false_result"; return false; } else { if ($validateResult["faultCode"]) { $this->_errorMsg = "validate_card_fault_code"; return false; } } /* 返り値の取得 * * * 1.ERRORの場合 例)カード情報が違う * Array * ( [STATUS] => FAIL * [ERROR] => Array( [0] => 354:bad_card_number ) * [LOG_ID] => 43634282 //バリデーション時の入出力ID * ) * * 2.OKの場合 * Array * ([BALANCE] => 100000 //バリデーション実行正常終了時のクレジット数(引き落とし前のクレジット数) * [BCS_ID] => 1581403990 //バリデーション正常終了時に発行されるセッション番号(決済実行時に使用) * [ERROR] => Array() * [STATUS] => OK * [LOG_ID] => 43634465 //バリデーション時の入出力ID * ) */ // 有効ではない if ($validateResult["ERROR"]) { $this->_errorMsg = $validateResult["ERROR"][0]; return false; } // 有効ではない if ("OK" != $validateResult["STATUS"]) { $this->_errorMsg = "validate_card_bad_status"; return false; } /* ■■■■■■ * 決済ロジック * ■■■■■■ * STATUSがOKで帰ってきたらまたbitcashにデータの送信。決済を行う。 */ $param["SHOP_ID"] = self::BITCASH_SHOP_ID; $param["SHOP_PASSWD"] = self::BITCASH_SHOP_PASS; $param["CARD_NUMBER"] = $cardNumber; $param["BCS_ID"] = $validateResult["BCS_ID"]; $param["PRICE"] = $orderingData["pay_total"]; $param["ORDER_ID"] = $orderingData["id"]; $param = Zend_XmlRpc_Value::getXmlRpcValue($param, Zend_XmlRpc_Value::XMLRPC_TYPE_STRUCT); $result = $proxy->do_settlement($param); if (!$result) { $this->_errorMsg = "do_settlement_false_result"; return false; } else { if ($result["faultCode"]) { $this->_errorMsg = "do_settlement_fault_code"; return false; } } /* 返り値の取得 * * 1.ERRORの場合 例)BCS_ID(バリデート時に生成されるID)がない場合 * Array * ( [STATUS] => FAIL * [ERROR] => Array([0] => 304:no_bcs_id) * [LOG_ID] => 43641701 //決済時の入出力ID * ) * * 2.OKの場合 * Array * ( [SALES_ID] => 28293032 //決済実行正常終了時の販売ID * [BALANCE] => 99900 //決済実行正常終了時の残りクレジット数。 * [ERROR] => Array() * [STATUS] => OK * [LOG_ID] => 43641640 //決済時の入出力ID * ) */ // 有効ではない if ($result["ERROR"]) { $this->_errorMsg = $result["ERROR"][0]; return false; } // 有効ではない if ("OK" != $result["STATUS"]) { $this->_errorMsg = "do_settlement_bad_status"; return false; } return $result; } catch (Zend_XmlRpc_Client_HttpException $e) { // HTTP通信エラー $SendMailOBJ = SendMail::getInstance(); $mailElements["subject"] = "ビットキャッシュHTTP通信エラー"; $mailElements["text_body"] = "注文ID:" . $orderingData["id"] . "\nカード番号:" . $cardNumber . "\n金額:" . $orderingData["pay_total"] . "\n" . $e; $SendMailOBJ->debugMailTo($mailElements); return FALSE; } catch (Zend_XmlRpc_Client_FaultException $e) { // RPC実行エラー $SendMailOBJ = SendMail::getInstance(); $mailElements["subject"] = "ビットキャッシュRPC実行エラー"; $mailElements["text_body"] = "注文ID:" . $orderingData["id"] . "\nカード番号:" . $cardNumber . "\n金額:" . $orderingData["pay_total"] . "\n" . $e; $SendMailOBJ->debugMailTo($mailElements); return FALSE; } }
*/ //STATUS: wip //TODO: make facebook javascript login code work //TODO cosmetic: mark input field for username or password with a color if empty in validate_login_form() namespace cd; if ($session->id || $session->facebook_id) { return; } $login_div = 'login_div'; $reg_div = 'reg_div'; $recover_div = 'recover_div'; // only show "register user" if initial setup or if config allows it $show_reg_div = !UserList::getCount() || $session->allow_logins && $session->allow_registrations; // only show "recover password" if mail server is configured $show_recover_div = SendMail::getInstance()->getServer() ? true : false; if ($show_reg_div) { // this must be included here so registration handling can happen first echo '<div id="' . $reg_div . '" style="display:none;">'; include 'register.php'; echo '</div>'; } if ($show_recover_div) { echo '<div id="' . $recover_div . '" style="display:none;">'; include 'forgot_pwd.php'; echo '</div>'; } // include js validation snippets $view = new ViewModel('views/core/js_validation.php'); echo $view->render(); $header->embedCss('.login_box{' . 'font-size:14px;' . 'border:1px solid #aaa;' . 'min-width:280px;' . 'color:#000;' . 'background-color:#ddd;' . 'padding:10px;' . 'border-radius:15px 15px 15px 15px;' . '-moz-border-radius:15px 15px 15px 15px;' . '}');