if ($compDel && $_REQUEST["mode"] == "delete_all_folder") { $sql = "UPDATE info_mail SET" . " dir_id = 0" . " WHERE dir_id = 4"; $db->executeSql($sql, array()); exit("削除フォルダを空にしました。"); } $infoIdAry = $_REQUEST["info_id"]; foreach ($infoIdAry as $value) { if (is_numeric($value)) { // $valueで指定されたメール情報をDBから取得する $sql = "SELECT * FROM info_mail WHERE info_id = " . $value . ";"; $rs = $db->executeSql($sql, array()); $infoMail = NULL; if ($rs->numRows() > 0) { $record = $rs->fetchRow(DB_FETCHMODE_ASSOC); // DBから取得したメール情報をオブジェクトとして格納する $infoMail = new InfoMail($record, $db); if ($compDel) { $infoMail->updateDirId(0); $dirName = "メールを完全に削除しました。"; } else { if ($_REQUEST["mode"] == "already_all") { $infoMail->updateReplyStatus(ALREADY_REPLIED); $dirName = "メールを対応済みにしました。"; } else { if ($_REQUEST["mode"] == "retire_all") { $infoMail->updateRetireStatus($define); $dirName = "退会にしました。"; } else { if ($_REQUEST["mode"] == "stop_all") { $infoMail->updateMailStatus($define); $dirName = "配信停止にしました。";
exit; } } //------------------------ // 表示メールデータの取得 //------------------------ // $_REQUEST[info_id]で指定されたメール情報をDBから取得する $sql = " SELECT *,SUBSTRING(from_name,1,LOCATE('@',from_name)) as from_name_no_domain" . " FROM info_mail" . " WHERE info_id = ? "; $key = array(); $key[] = $_REQUEST["info_id"]; $rs = $db->executeSql($sql, $key); if ($rs->numRows() > 0) { $array = $rs->fetchRow(DB_FETCHMODE_ASSOC); // DBから取得したメール情報をオブジェクトとして格納する $infoMail = null; $infoMail = new InfoMail($array, $db); // 状態フラグが未読なら既読に変更する if ($infoMail->readStatus == UNREAD_MAIL) { $infoMail->updateReadStatus(READED_MAIL); } // 更新用フラグが送られていれば、担当者or対応状況を更新する if (isset($_REQUEST["update"])) { if (isset($_REQUEST["new_operator_id"])) { $infoMail->updateOperatorId($_REQUEST["new_operator_id"]); } if (isset($_REQUEST["new_reply_status"])) { $infoMail->updateReplyStatus($_REQUEST["new_reply_status"]); } } /*else { // 表示メールデータの担当者が未対応の場合、ログインユーザーを設定(更新)する
exit("本文を入力してください"); } // メールアカウントのチェック if (empty($site["site_account"][$_REQUEST["from_address"]]["from"])) { print "メールアカウントが不正です"; exit; } // 担当者IDのチェック if (!is_numeric($_REQUEST["new_operator_id"])) { exit("担当者IDが不正です"); } //------------------------ // メール送信&DB格納処理 //------------------------ // 新規なのでユーザー情報なし $infoMail = new InfoMail(array(), $db); $toAddressStr = ""; $userAddressAry = $_REQUEST["user_address"]; // リストからメール送信処理 foreach ($userAddressAry as $key => $toAddressStr) { if (ereg("[a-zA-Z0-9_.+-\\/?]+@[a-zA-Z0-9_.\\-]+", $toAddressStr)) { //インサート用配列生成 $params = array("From" => $site["from_address"][$_REQUEST["from_address"]]["from"], "FromName" => $_REQUEST["fromName"], "To" => $toAddressStr, "Subject" => $_REQUEST["subject"], "plain" => $_REQUEST["body"], "opeId" => $_REQUEST["new_operator_id"]); //メールデータ格納 $infoMail->addInfoMail($params); } else { if ($toAddressStr) { print "不正なアドレスの可能性があります。 => " . $toAddressStr; exit; } }
/** * SMTP接続を開始する。 * * @param * * @return boolean */ public function openSmtpConnect() { // 未接続なら接続処理 if (!$this->smtp_conn) { $mailServerIpAry = array(); // IPが空ならデフォルトセット if (!$this->_smtpMailServerIp) { // デフォルト(通常) $this->setSendMailServerIp(self::DEFAULT_SMTP_SEND_MAIL_IP); } // ホストとポートに分ける $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) { // デバッグメール $InfoMailOBJ = new InfoMail(); $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"]); // システムにエラーメール $InfoMailOBJ->debugMailTo($debugMail); } } return true; }
//foreach ($toAddressAry as $key => $value) { // $toAddressAry[$key] = trim($toAddressAry[$key]); //} $ccAddressAry = explode(",", $_REQUEST["cc_address"]); foreach ($ccAddressAry as $key => $value) { $ccAddressAry[$key] = trim($ccAddressAry[$key]); } // 上で取得した配列を一つにまとめる $addressArray = array_merge((array) $toAddressAry, (array) $ccAddressAry); // $_REQUEST[mail_id]で指定されたメール情報をDBから取得する $sql = " SELECT *,SUBSTRING(from_name,1,LOCATE('@',from_address)) as from_name_no_domain " . " FROM info_mail " . " WHERE info_id = ? "; $key = array($_REQUEST["info_id"]); $rs = $db->executeSql($sql, $key); if ($rs->numRows() > 0) { // DBから取得したメール情報を格納する $infoMail = new InfoMail($rs->fetchRow(DB_FETCHMODE_ASSOC), $db); // 返信したメールの担当者を更新する $infoMail->updateOperatorId($_REQUEST["new_operator_id"]); // 返信したメールの対応状況を更新する $infoMail->updateReplyStatus($_REQUEST["new_reply_status"]); //宛先を更新 array_unshift($addressArray, $infoMail->fromAddress); //アドレス表示制限 if ($loginAdminData["authority_type"] == $define["define"]["AUTHORITY_TYPE_OPERATOR"]) { $toAddressAry[] = $infoMail->fromNameNoDomain . "<ドメイン非表示>"; } else { if ($loginAdminData["authority_type"] == $define["define"]["AUTHORITY_TYPE_SYSTEM"] or $loginAdminData["authority_type"] == $define["define"]["AUTHORITY_TYPE_MANAGE"] or $loginAdminData["authority_type"] == $define["define"]["AUTHORITY_TYPE_INFORMATION"]) { $toAddressAry[] = $infoMail->fromAddress; } else { $toAddressAry[] = "<アドレス非表示>"; }
die("表示できません"); } // move.phpを表示するには$_REQUEST[new_dir_id]が必須 if (empty($_REQUEST["new_dir_id"]) || !is_numeric($_REQUEST["new_dir_id"])) { die("表示できません"); } // $_REQUEST[mail_id]で指定されたメール情報をDBから取得する $sql = "SELECT *" . " FROM info_mail" . " WHERE info_id = ?"; $rs = $db->executeSql($sql, array($_REQUEST["info_id"])); //-------------------------------------- // 移動対象メールデータの取得&移動処理 //-------------------------------------- $infoMail = NULL; if ($rs->numRows() > 0) { // DBから取得したメール情報をオブジェクトとして格納する $infoMail = new InfoMail($rs->fetchRow(DB_FETCHMODE_ASSOC), $db); // 削除済みフォルダにあるメールをさらに削除しようとした場合は完全削除処理を行う if ($infoMail->dirId == DELETE_DIR && $_REQUEST["new_dir_id"] == DELETE_DIR) { // 完全削除時は完全削除パス入力が必須 if (md5($_REQUEST["del_pass"]) != $delPw) { // $delPw: config.ini内で宣言 die("完全削除パスが違います!!"); } $compDel = TRUE; // 完全削除フラグON } else { $compDel = FALSE; // 通常のフォルダ移動の場合 } // 移動前のフォルダIDを残しておく $oldDirId = $infoMail->dirId;
} } //$toAddressStr = ""; $toUserIdStr = ""; $infoIdAry = $_REQUEST["info_id"]; foreach ($infoIdAry as $value) { if (is_numeric($value)) { // $valueで指定されたメール情報をDBから取得する $sql = "SELECT * FROM info_mail" . " WHERE info_id = ? "; $key = array(); $key[] = $value; $rs = $db->executeSql($sql, $key); if ($rs->numRows() > 0) { $record = $rs->fetchRow(DB_FETCHMODE_ASSOC); // DBから取得したメール情報をオブジェクトとして格納する $infoMail = new InfoMail($record, $db); // メールアドレスのチェック if (ereg("[a-zA-Z0-9_.\\-]+@[a-zA-Z0-9_.\\-]+", $infoMail->fromAddress)) { // 返信したメールの担当者を更新する $infoMail->updateOperatorId($_REQUEST["new_operator_id"]); // 返信したメールの対応状況を更新する $infoMail->updateReplyStatus($_REQUEST["new_reply_status"]); //インサート用配列生成 $params = array("From" => $site["from_address"][$_REQUEST["from_address"]]["from"], "FromName" => $_REQUEST["fromName"], "To" => $infoMail->fromAddress, "Subject" => $_REQUEST["subject"], "plain" => $_REQUEST["body"], "opeId" => $_REQUEST["new_operator_id"]); //メールデータ格納 $infoMail->addInfoMail($params); //送信実行処理 $sendUrlArray = $infoMail->mail_server_array; $sendUrl = $sendUrlArray[$_REQUEST["select_send_mail"]]; $convertArray = array("%site_name%" => $site["site_account"][$_REQUEST["from_address"]]["name"], "%domain%" => $site["site_account"][$_REQUEST["from_address"]]["domain"], "%info_account%" => $site["site_account"][$_REQUEST["from_address"]]["info"], "%teishi_account%" => $site["site_account"][$_REQUEST["from_address"]]["teishi"]); $_REQUEST["body"] = str_replace(array_keys($convertArray), array_values($convertArray), $_REQUEST["body"]);
//-------------------------------- // リクエスト送信データのチェック //-------------------------------- if (empty($_REQUEST["info_id"]) || !is_numeric($_REQUEST["user_id"])) { die("表示できません"); } // $_REQUEST[info_id]で指定されたメール情報をDBから取得する $sql = "SELECT *" . " FROM info_mail as im, user as u" . " WHERE im.info_id = ?" . " AND u.id = ?" . " AND u.id = im.user_id"; $rs = $db->executeSql($sql, array($_REQUEST["info_id"], $_REQUEST["user_id"])); //-------------------------------------- // 移動対象メールデータの取得&移動処理 //-------------------------------------- $infoMail = NULL; if ($rs->numRows() > 0) { // DBから取得したメール情報をオブジェクトとして格納する $infoMail = new InfoMail($rs->fetchRow(DB_FETCHMODE_ASSOC), $db); if ($_REQUEST["mode"] == "retire") { $infoMail->updateRetireStatus($define); $dirName = "退会にしました。"; } else { if ($_REQUEST["mode"] == "stop") { $infoMail->updateMailStatus($define); $dirName = "配信停止にしました。"; } else { if ($_REQUEST["mode"] == "danger_on") { $infoMail->updateDangerStatus($define); $dirName = "ブラックを有効にしました。"; } else { if ($_REQUEST["mode"] == "danger_off") { $infoMail->updateDangerStatusForRescission($define); $dirName = "ブラックを解除しました。";
//------------------------ // メール送信&DB格納処理 //------------------------ // 宛先とCCの送信メールアドレスを配列として格納する $toAddressAry = explode(",", $_REQUEST["to_address"]); foreach ($toAddressAry as $key => $value) { $toAddressAry[$key] = trim($value); } $ccAddressAry = explode(",", $_REQUEST["cc_address"]); foreach ($ccAddressAry as $key => $value) { $ccAddressAry[$key] = trim($value); } // 上で取得した配列を一つにまとめる $addressArray = array_merge($toAddressAry, $ccAddressAry); // 新規なのでユーザー情報なし $infoMail = new InfoMail(array(), $db); // 宛先&CCメールアドレスへの送信処理 foreach ($addressArray as $key => $value) { if (ereg("[a-zA-Z0-9_.+-\\/?]+@[a-zA-Z0-9_.\\-]+", $addressArray[$key])) { // 最初の1通目のみDBに送信メールデータを格納する if ($key == 0) { //インサート用配列生成 $params = array("From" => $site["from_address"][$_REQUEST["from_address"]]["from"], "FromName" => $_REQUEST["fromName"], "To" => $addressArray[$key], "Subject" => $_REQUEST["subject"], "plain" => $_REQUEST["body"], "opeId" => $_REQUEST["new_operator_id"]); //メールデータ格納 $infoMail->addInfoMail($params); } } else { if ($addressArray[$key]) { print "不正なアドレスの可能性があります。 => " . $addressArray[$key]; exit; }