/** * ส่งอีเมล์ ตาม ID * * @param Request $request */ public function save(Request $request) { if ($request->initSession() && $request->isReferer() && ($login = Login::isMember())) { // ค่าที่ส่งมา $subject = $request->post('mail_subject')->topic(); $detail = nl2br($request->post('mail_detail')->textarea()); // ตรวจสอบ ค่าที่ส่งมา $ret = array(); $antispam = new Antispam($request->post('mail_antispamid')->toString()); if (!$antispam->valid($request->post('mail_antispam')->toString())) { // Antispam ไม่ถูกต้อง $ret['ret_mail_antispam'] = 'this'; $ret['input'] = 'mail_antispam'; } else { // ตรวจสอบผู้รับ $reciever = array(); foreach (self::getUser($request->post('mail_reciever')->filter('0-9a-z')) as $item) { $reciever[] = $item['email'] . (empty($item['name']) ? '' : '<' . $item['name'] . '>'); } $reciever = implode(',', $reciever); // ตรวจสอบค่าที่ส่งมา if ($reciever == '') { $ret['alert'] = Language::get('Unable to send e-mail, Because you can not send e-mail to yourself or can not find the email address of the recipient.'); $ret['location'] = WEB_URL . 'index.php'; } elseif ($subject == '') { $ret['ret_mail_subject'] = 'this'; $ret['input'] = 'mail_subject'; } elseif ($detail == '') { $ret['ret_mail_detail'] = 'this'; $ret['input'] = 'mail_detail'; } else { // ส่งอีเมล์ $err = Email::send($reciever, $login['email'] . (empty($login['displayname']) ? '' : '<' . $login['displayname'] . '>'), $subject, $detail); if (empty($err)) { // เคลียร์ Antispam $antispam->delete(); // ส่งอีเมล์สำเร็จ $ret['alert'] = Language::get('Your message was sent successfully'); $ret['location'] = WEB_URL . 'index.php'; } else { // ข้อผิดพลาดการส่งอีเมล์ echo $err; } } } if (!empty($ret)) { // คืนค่าเป็น JSON echo json_encode($ret); } } }
/** * ฟังก์ชั่นส่งเมล์จากแม่แบบจดหมาย * * @param int $id ID ของจดหมายที่ต้องการส่ง * @param string $module ชื่อโมดูลของจดหมายที่ต้องการส่ง * @param array $datas ข้อมูลที่จะถูกแทนที่ลงในจดหมาย ในรูป 'ตัวแปร'=>'ข้อความ' * @param string $to ที่อยู่อีเมล์ผู้รับ คั่นแต่ละรายชื่อด้วย , * @return string สำเร็จคืนค่าว่าง ไม่สำเร็จ คืนค่าข้อความผิดพลาด */ public static function send($id, $module, $datas, $to) { $model = new static(); $email = $model->db()->createQuery()->from('emailtemplate')->where(array(array('module', $module), array('email_id', (int) $id), array('language', array(Language::name(), ''))))->cacheOn()->toArray()->first('from_email', 'copy_to', 'subject', 'detail'); if ($email === false) { return Language::get('email template not found'); } else { // ผู้ส่ง $from = empty($email['from_email']) ? self::$cfg->noreply_email : $email['from_email']; // ข้อความในอีเมล์ $replace = ArrayTool::replace(array('/%WEBTITLE%/' => strip_tags(self::$cfg->web_title), '/%WEBURL%/' => WEB_URL, '/%ADMINEMAIL%/' => $from, '/%TIME%/' => Date::format()), $datas); ArrayTool::extract($replace, $keys, $values); $msg = preg_replace($keys, $values, $email['detail']); $subject = preg_replace($keys, $values, $email['subject']); $to = explode(',', $to); if (!empty($email['copy_to'])) { $to[] = $email['copy_to']; } // ส่งอีเมล์ return parent::send(implode(',', $to), $from, $subject, $msg); } }
/** * ฟังก์ชั่นส่งอีเมล์ */ public function save() { $ret = array(); // referer, session, member if (self::$request->initSession() && self::$request->isSafe() && ($login = Login::adminAccess())) { if ($login['email'] == 'demo') { $ret['alert'] = Language::get('Unable to complete the transaction'); } else { // รับค่าจากการ POST $save = array('reciever' => self::$request->post('reciever')->toString(), 'from' => self::$request->post('from')->toString(), 'subject' => self::$request->post('subject')->topic(), 'detail' => self::$request->post('detail')->toString()); // ตรวจสอบค่าที่ส่งมา $input = false; // reciever if (!empty($save['reciever'])) { foreach (explode(',', $save['reciever']) as $item) { if (!Validator::email($item)) { if (!$input) { $input = 'reciever'; break; } } } } else { $ret['reciever'] = ''; } // subject if (empty($save['subject'])) { $input = !$input ? 'subject' : $input; } else { $ret['ret_subject'] = ''; } // from if (Login::isAdmin()) { if ($save['from'] == self::$cfg->noreply_email) { $save['from'] = self::$cfg->noreply_email . '<' . strip_tags(self::$cfg->web_title) . '>'; } else { $user = $this->db()->createQuery()->from('user')->where(array('email', $save['from']))->first('email', 'displayname'); if ($user) { $save['from'] = $user->email . (empty($user->displayname) ? '' : '<' . $user->displayname . '>'); } else { // ไม่พบผู้ส่ง ให้ส่งโดยตัวเอง $save['from'] = $login['email']; } } } else { // ไม่ใช่แอดมิน ผู้ส่งเป็นตัวเองเท่านั้น $save['from'] = $login['email']; } // detail $patt = array('/^( |\\s){0,}<br[\\s\\/]+?>( |\\s){0,}$/iu' => '', '/<\\?(.*?)\\?>/su' => '', '@<script[^>]*?>.*?</script>@siu' => ''); $save['detail'] = trim(preg_replace(array_keys($patt), array_values($patt), $save['detail'])); if (!$input) { $err = Email::send($save['reciever'], $save['from'], $save['subject'], $save['detail']); if (empty($err)) { // ส่งอีเมล์สำเร็จ $ret['alert'] = Language::get('Your message was sent successfully'); $ret['location'] = self::$request->getUri()->postBack('index.php', array('id' => 0)); } else { // ข้อผิดพลาดการส่งอีเมล์ $ret['alert'] = $err; } // clear self::$request->removeToken(); } else { // คืนค่า input ตัวแรกที่ error $ret['input'] = $input; } } } else { $ret['alert'] = Language::get('Unable to complete the transaction'); } // คืนค่าเป็น JSON echo json_encode($ret); }