public function envioProgramadoAction() { //executar este script a cada 20 minutos .... $mCron = new Application_Model_Agendador(); $mSend = new Application_Model_SendMail(); $dados = new Application_Model_Contatos(); $date = date('Y-m-d H:i:s'); $data = $mCron->getEnvioToDate($date); if (count($data)) { $this->sessao_agenda->layout = $data->agn_template; $this->sessao_agenda->titulo = $data->agn_assunto; $mCron->setStatus('enviado', $data->agn_id); $layout = isset($this->sessao_agenda->layout) ? $this->sessao_agenda->layout : $data->agn_template; $titulo = isset($this->sessao_agenda->titulo) ? $this->sessao_agenda->titulo : $data->agn_assunto; $total_por_vez = 1000; $collection = $dados->getListContatosNotSend('inativo', $total_por_vez); //ENVIA 1000 POR VEZ if (!empty($collection)) { foreach ($collection as $contato) { $nome_usuario = $contato['nome']; $usuario_email = $contato['email']; $usuario_id = $contato['id_contato']; $nome_usuario = $nome_usuario != "" ? $nome_usuario : 'Usuário'; $dinamic_content = $contato['dinamic_content']; $arguments = array('template' => $layout, 'email_recebe' => $usuario_email, 'nome_recebe' => $nome_usuario, 'dinamic_content' => $dinamic_content); $mSend->setBody($arguments, $titulo); $enviou = $mSend->sendEmail(); $dados->setStatusEnviou($usuario_id); //sleep(5); } $this->view->enviando = 'Esta página é executada através do agendador cron, executando a coleção de envio: <br><pre> ' . print_r((array) $collection, true) . '</pre>'; } else { $dados->setStatusEnviouTudo(); unset($this->sessao_agenda->layout); unset($this->sessao_agenda->titulo); $this->view->enviando = 'Esta página é executada através do agendador cron - fim de envio de emails.'; } } else { $this->view->enviando = 'Esta página é executada através do agendador cron - Não há envios agendados para ' . date('d/m/Y H:i:s'); } }
function sendMailAction() { $postMsg = $this->_getParam('titulo') ? $this->_getParam('titulo') : 'MENSAGEM PARA VOCÊ'; if ($this->_getParam('lay')) { $this->sessao->layout = $this->_getParam('lay'); } if ($this->_getParam('titulo')) { $this->sessao->titulo = $this->_getParam('titulo'); } $frase = isset($this->sessao->frase) ? $this->sessao->frase : 'Iniciando envio de mensagem'; $layout = isset($this->sessao->layout) ? $this->sessao->layout : $this->_getParam('lay'); $titulo = isset($this->sessao->titulo) ? $this->sessao->titulo : $this->_getParam('titulo'); $send = $this->_getParam('enviar'); $dados = new Application_Model_Contatos(); $relatorio = new Application_Model_Relatorio(); if ($send != '' && $layout != "" && $titulo != "") { //agenda o envio para garantir o processo até o final set_time_limit(0); ignore_user_abort(true); $total_por_vez = 100; $collection = $dados->getListContatosNotSend('inativo', $total_por_vez); //ENVIA 8 POR VEZ $mSend = new Application_Model_SendMail(); $processado = $dados->getTotalContatosEnviados(); $total = $dados->getTotalContatosAtivos(); if ($frase == 'Iniciando envio de mensagem') { $processado = $processado - $total_por_vez; $collectionAgenda = array('data' => date("Y-m-d H:i:s", strtotime(date('Y-m-d H:i:s') . " +2 minutes")), 'template' => $layout, 'assunto' => $titulo); $mCron = new Application_Model_Agendador(); $add = $mCron->addEnvio($collectionAgenda); } if (!empty($collection)) { $emails = '<h1>' . $frase . '</h1>'; foreach ($collection as $contato) { $this->view->porcentagem = floor($processado / $total * 100); $nome_usuario = $contato['nome']; $usuario_email = $contato['email']; $usuario_id = $contato['id_contato']; $nome_usuario = $nome_usuario != "" ? $nome_usuario : 'Usuário'; $dinamic_content = $contato['dinamic_content']; $arguments = array('template' => $layout, 'email_recebe' => $usuario_email, 'nome_recebe' => $nome_usuario, 'dinamic_content' => $dinamic_content); $mSend->setBody($arguments, $titulo); $enviou = $mSend->sendEmail(); $dados->setStatusEnviou($usuario_id); $RESP = $enviou ? 'ENVIADO' : 'NÃO ENVIADO'; $icone = $enviou ? '<img src="' . $this->view->site . '/img/ok.png" border="0">' : '<img src="' . $this->view->site . '/img/error.png" border="0">'; // $relatorio->setStatus($usuario_id, $RESP); $emails .= "<div class=\"send\">{$icone} {$RESP} ::::: Email: {$usuario_email} </div>"; } $this->view->msg = $emails . '<meta http-equiv="refresh" content="5;url=' . $this->view->site . '/index/send-mail/enviar/go" />'; $this->sessao->frase = 'Enviando mensagens. Se você não quiser acompanhar o processo, basta fechar essa janela.'; } else { $dados->setStatusEnviouTudo(); unset($this->sessao->layout); unset($this->sessao->titulo); unset($this->sessao->frase); $this->view->porcentagem = 100; $this->view->msg = '<div class=\\"fim\\"><h1>Todas as Mensagens foram enviadas com sucesso!</h1> <br> <p><a href="' . $this->view->site . '/index">Clique aqui</a> pare retornar.</p></div>'; } } else { $this->view->msg = '<input type="button" class="btn btn-info" onclick="location.href=\'' . $this->view->site . '/index\';" value="Voltar"><br><br>'; $selec = ''; if ($layout != '') { $send = $this->_getParam('enviar'); if ($layout == 'null') { $this->view->msg = ''; $this->view->sendScript = ''; } else { $this->view->sendScript = ' onclick="sendMail()"'; $this->view->msg = ''; $action = ''; $this->view->layout = "templates/" . $layout; $this->view->msg .= '<form name="layout" action="' . $this->view->site . '/index/send-mail" method="post">' . "\n" . '<input type="hidden" name="lay" value="' . $layout . '">' . "\n" . '<input type="hidden" name="enviar" value="">' . "\n" . '<br><input type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModalQuest" value="Enviar mensagem agora">' . ' <input type="button" class="btn btn-info" data-toggle="modal" data-target="#myModalAgend" value="Agendar envio">' . ' <input type="button" class="btn btn-warning" ' . 'onclick="location.href=\'' . $this->view->site . '/index/editar-template/tmp/' . preg_replace('/.phtml/', '', $layout) . '\';"' . ' value="Editar esta template"> <input type="button" class="btn btn-default"' . ' data-toggle="modal" data-target="#myModal" value="Enviar um Email teste">' . ' <input type="button" class="btn btn-info"' . ' onclick="location.href=\'' . $this->view->site . '/index\';" value="Voltar"><br><br>' . "\n"; } } $dados->setStatusEnviouTudo(); $html = "\n\n<script type=\"text/javascript\">\n" . "function sendForm(obj){\n" . "if (obj.options[obj.selectedIndex].value != ''){ \n" . "document.layout.submit();\n" . " }\n" . "}\n" . "function sendMail(){\n " . " document.layout.enviar.value = 'go';\n" . " document.layout.submit();\n" . "}\n" . "</script>\n"; $html .= '<form name="layout" action="' . $this->view->site . '/index/send-mail" method="post">' . "\n"; $html .= '<div class="form-group">' . "\n"; $html .= '<label for="inputTitle">Título da Mensagem:</label>' . "\n"; $html .= '<input hidden name="tit" id="tit_temp">' . "\n"; $html .= '<input type="text" class="form-control" size="50" id="title_msg" name="titulo" value="' . $postMsg . '">' . "\n"; $html .= '</div>' . "\n"; $html .= '<div class="form-group">' . "\n"; $html .= '<label for="inputLayout">Layout:</label>' . "\n"; $html .= '<select name="lay" class="form-control" onChange="sendForm(this);">' . "\n"; $html .= '<option value="null">Selecione o layout</option>' . "\n"; $files = glob(APPLICATION_PATH . "/views/scripts/templates/*.phtml"); foreach ($files as $template) { $template = str_replace(APPLICATION_PATH . "/views/scripts/templates/", "", $template); $html .= "<option value=\"{$template}\""; $html .= $layout == $template ? 'selected="selected"' : ''; $tempname = preg_replace('/.phtml/', '', $template); $html .= ">{$tempname}</option>\n"; } $html .= "</select>"; $html .= '</div>' . "\n" . "</form>"; $this->view->msg .= $html; } }