/** * 初期設定 プラグイン用 * * @param int $languageId 言語ID * @param string $pluginName プラグイン名 * @return void * @see CakeEmail::$charset default=utf-8 * @see CakeEmail::$headerCharset default=utf-8 */ public function initPlugin($languageId, $pluginName = null) { // SiteSettingからメール設定を取得する SiteSettingUtil::setup(array('Mail.from', 'Mail.from_name', 'Mail.messageType', 'Mail.transport', 'Mail.smtp.host', 'Mail.smtp.port', 'Mail.smtp.user', 'Mail.smtp.pass')); $this->__initConfig(); //$this->__setTags($languageId, $pluginName); $this->mailAssignTag->initTags($languageId, $pluginName); }
/** * メール送信 * * @return void */ public function send() { // SiteSettingからメール設定を取得する SiteSettingUtil::setup(array('Mail.from', 'Mail.from_name', 'Mail.messageType', 'Mail.transport', 'Mail.smtp.host', 'Mail.smtp.port', 'Mail.smtp.user', 'Mail.smtp.pass', 'App.site_name')); $from = SiteSettingUtil::read('Mail.from'); // Fromが空ならメール未設定のため、メール送らない if (empty($from)) { $this->out('<error>From Address is empty. [' . __METHOD__ . ']</error>'); return $this->_stop(); } $now = NetCommonsTime::getNowDatetime(); // キュー取得&ロック - シェル実行の排他を実現したいため、行ロックしている // http://k-1blog.com/development/program/post-7407/ // http://d.hatena.ne.jp/fat47/20140212/1392171784 // 下記SQL(テーブル結合&範囲条件)でSELECT FOR UPDATEを実行すると、テーブルロック $sql = 'SELECT * FROM ' . 'mail_queues MailQueue, ' . 'mail_queue_users MailQueueUser ' . 'WHERE ' . 'MailQueue.id = MailQueueUser.mail_queue_id ' . 'AND MailQueue.send_time <= ? ' . 'FOR UPDATE '; $mailQueues = $this->MailQueue->query($sql, array($now)); if (empty($mailQueues)) { $this->out('MailQueue is empty. [' . __METHOD__ . '] '); return $this->_stop(); } $beforeId = $mailQueues[0]['MailQueue']['id']; $isSend = null; foreach ($mailQueues as $mailQueue) { // idが変わったら、MailQueue削除 if ($beforeId != $mailQueue['MailQueue']['id']) { $this->MailQueue->delete($beforeId); $isSend = null; } // ブロック非公開、期間限定の対応 if (is_null($isSend)) { $isSend = $this->_isSendBlockType($mailQueue); } if ($isSend) { $mail = new NetCommonsMail(); $mail->initShell($mailQueue); try { $mail->sendQueueMail($mailQueue['MailQueueUser'], $mailQueue['MailQueue']['language_id']); } catch (Exception $ex) { // SMTPの設定間違い等で送れなくても、処理を続行。メールは破棄(設定間違いでメールがキューに溜まる事を防ぐ) CakeLog::error($ex); } } // MailQueueUser削除 $this->MailQueueUser->delete($mailQueue['MailQueueUser']['id']); $beforeId = $mailQueue['MailQueue']['id']; } // 後始末 - MailQueue削除 $this->MailQueue->delete($beforeId); }
/** * beforeFilter * * @return void **/ public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('request', 'confirm', 'update'); //ページタイトル $this->set('pageTitle', __d('auth', 'Forgot your Password?')); SiteSettingUtil::setup('ForgotPass'); if (!SiteSettingUtil::read('ForgotPass.use_password_reissue', '0')) { return $this->setAction('throwBadRequest'); } //メール通知の場合、NetCommonsMailUtilityをメンバー変数にセットする。Mockであれば、newをしない。 //テストでMockに差し替えが必要なための処理であるので、カバレッジレポートから除外する。 //@codeCoverageIgnoreStart if (substr(get_class($this->mail), 0, 4) !== 'Mock') { $this->mail = new NetCommonsMail(); } //@codeCoverageIgnoreEnd }
/** * beforeFilter * * @return void **/ public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('entry_key', 'request', 'confirm', 'completion', 'approval', 'acceptance'); //ページタイトル $this->set('pageTitle', __d('auth', 'Sign up')); SiteSettingUtil::setup('AutoRegist'); //SiteSettingUtil::setup(array( // // * 入会設定 // // ** 自動会員登録を許可する // 'AutoRegist.use_automatic_register', // // ** アカウント登録の最終決定 // 'AutoRegist.confirmation', // // ** 入力キーの使用 // 'AutoRegist.use_secret_key', // // ** 入力キー // 'AutoRegist.secret_key', // // ** 自動登録時の権限 // 'AutoRegist.role_key', // // ** 自動登録時にデフォルトルームに参加する // 'AutoRegist.prarticipate_default_room', // // // ** 利用許諾文 // 'AutoRegist.disclaimer', // // ** 会員登録承認メールの件名 // 'AutoRegist.approval_mail_subject', // // ** 会員登録承認メールの本文 // 'AutoRegist.approval_mail_body', // // ** 会員登録受付メールの件名 // 'AutoRegist.acceptance_mail_subject', // // ** 会員登録受付メールの本文 // 'AutoRegist.acceptance_mail_body', //)); if (!SiteSettingUtil::read('AutoRegist.use_automatic_register', false)) { return $this->setAction('throwBadRequest'); } if (in_array($this->params['action'], ['approval', 'acceptance'], true) && Hash::get($this->request->query, 'activate_key')) { $this->helpers['NetCommons.Wizard']['navibar'] = Hash::remove($this->helpers['NetCommons.Wizard']['navibar'], self::WIZARD_ENTRY_KEY); } else { //管理者の承認が必要の場合、ウィザードの文言変更 $value = SiteSettingUtil::read('AutoRegist.confirmation'); if ($value === AutoUserRegist::CONFIRMATION_ADMIN_APPROVAL) { $this->helpers['NetCommons.Wizard']['navibar'] = Hash::insert($this->helpers['NetCommons.Wizard']['navibar'], self::WIZARD_COMPLETION . '.label', array('auth', 'Complete request registration.')); } //入力キーのチェック $value = SiteSettingUtil::read('AutoRegist.use_secret_key'); if ($value) { if (!in_array($this->params['action'], ['approval', 'acceptance'], true) && !$this->Session->read('AutoUserRegistKey')) { if ($this->params['action'] === 'entry_key') { $this->Session->delete('AutoUserRegistKey'); $this->Session->write('AutoUserRegistRedirect', 'request'); } else { $this->Session->write('AutoUserRegistRedirect', $this->params['action']); } $this->setAction('entry_key'); } } else { $this->helpers['NetCommons.Wizard']['navibar'] = Hash::remove($this->helpers['NetCommons.Wizard']['navibar'], self::WIZARD_ENTRY_KEY); } } }
/** * 初期設定 プラグイン用 * * @param int $languageId 言語ID * @param string $pluginName プラグイン名 * @return void * @see CakeEmail::$charset */ public function initPlugin($languageId, $pluginName = null) { // SiteSettingからメール設定を取得する SiteSettingUtil::setup(array('Mail.from', 'Mail.from_name', 'Mail.messageType', 'Mail.transport', 'App.site_name', 'Workflow.approval_mail_subject', 'Workflow.approval_mail_body', 'Workflow.disapproval_mail_subject', 'Workflow.disapproval_mail_body', 'Workflow.approval_completion_mail_subject', 'Workflow.approval_completion_mail_body', 'Workflow.contact_after_approval_mail_subject', 'Workflow.contact_after_approval_mail_body', 'Mail.body_header', 'Mail.signature')); $this->initTags($languageId, $pluginName); }