/** * @var Allows anonymous access to this controller's actions. * @access protected */ protected $allowAnonymous = false; /** * Sends an email based on the posted params. * */ public function actionSend() { //Is CpRequest? if (craft()->request->isCpRequest() == false) { return false; } $this->requirePostRequest(); //Vars $formData = new Mailer_FormModel(); $formData->sender_name = craft()->request->getPost('mailer_sender_name'); $formData->sender_mail = craft()->request->getPost('mailer_sender_mail'); $formData->subject = craft()->request->getPost('mailer_subject'); $formData->htmlBody = craft()->request->getPost('mailer_htmlBody'); $formData->attachment = \CUploadedFile::getInstanceByName('mailer_attachment'); $formData->sendto_custom = craft()->request->getPost('mailer_sendto_custom'); $formData->to = craft()->request->getPost('mailer_to'); $formData->cc = craft()->request->getPost('mailer_cc'); $formData->bcc = craft()->request->getPost('mailer_bcc'); $formData->sendto_usergroups = craft()->request->getPost('mailer_sendto_usergroups'); $formData->usergroups = craft()->request->getPost('mailer_usergroups'); $formData->sendto_users = craft()->request->getPost('mailer_sendto_users'); $formData->users = craft()->request->getPost('mailer_users'); //Model Validation if (!$formData->validate()) { //Log MailerPlugin::log('FormData validation failed: "' . implode('; ', $formData->getErrors()) . '"', LogLevel::Info); if (craft()->request->isAjaxRequest()) { return $this->returnErrorJson($formData->getErrors()); } else { //SetError craft()->userSession->setError(Craft::t('There was a problem with your submission, please check the form and try again!')); //Set UserElement if (!$formData->hasErrors('users') && !empty($formData->users)) { $users_element_array = array(); foreach ($formData->users as $user) { $users_element_array[] = craft()->users->getUserById($user); } $formData->users = $users_element_array; } //Return formData craft()->urlManager->setRouteVariables(array('formData' => $formData)); } } else { //Log MailerPlugin::log('FormData valid', LogLevel::Info); //Service $mailer_service = craft()->mailer_main->newMailer_fromForm($formData); //Return if ($mailer_service) { //Success if (craft()->request->isAjaxRequest()) { return $this->returnJson(array('success' => true)); } else { craft()->userSession->setNotice(Craft::t('The Mailer has successfully started'));
/** * Runs a task step. * * @param int $step * @return bool */ public function runStep($step) { //BatchMode? if ($this->getSettings()->batchMode) { if ($step != 0 && $step % $this->getSettings()->batchMails == 0) { sleep($this->getSettings()->batchTime); } } //Get MailerModel $email = $this->getSettings()->email; //Log if ($step == 0) { //Log $desc = str_replace(craft()->plugins->getPlugin('mailer')->getName() . ': ', '', $this->model->description); MailerPlugin::log('MailerTask (' . $desc . '): Task started: Step 0', LogLevel::Info); //Create & Save LogRecord $record = new Mailer_LogRecord(); $record->setIsNewRecord(true); $record->subject = $email->subject; $record->htmlBody = $email->htmlBody; $record->status = 'running'; $record->description = $desc; $record->save(); if ($record->hasErrors()) { MailerPlugin::log('MailerTask (' . $record->description . '): Failed to save LogRecord: "' . implode('; ', $record->getErrors()) . '"', LogLevel::Error); } else { MailerPlugin::log('MailerTask (' . $record->description . '): New LogRecord created', LogLevel::Info); } //Create LogModel $log = new Mailer_LogModel(); $log->id = $record->id; $log->success = 0; $log->errors = array(); } else { $log = $this->getSettings()->log; } //Get recipients for this task-loop $recipients = $this->getSettings()->recipients->recipients; $recipients = $recipients[$step]; //Set recipients $email->toEmail = $recipients['to']; if (!empty($recipients['cc'])) { $email->cc = explode(',', $recipients['cc']); //Email Model needs array for CC-mails } else { $email->cc = null; } if (!empty($recipients['bcc'])) { $email->bcc = explode(',', $recipients['bcc']); //Email Model needs array for BCC-mails } else { $email->bcc = null; } //Send try { craft()->email->sendEmail($email); //Add to Log MailerPlugin::log('MailerTask (' . $record->description . '): Mail send to "' . $email->toEmail . '"', LogLevel::Info); $log->success++; } catch (\Exception $e) { MailerPlugin::log($e->getMessage(), LogLevel::Error); //Add to Log $errors = $log->errors; $errors[] = array('message' => $e->getMessage(), 'email' => $email->toEmail); $log->errors = $errors; } //Update Log if ($step == $this->getTotalSteps() - 1) { //Get LogRecord $record = Mailer_LogRecord::model()->findbyPk($log->id); //Set attributes from LogModel $record->dateFinished = new DateTime(); $record->errors = $log->errors; $record->success = $log->success; if (count($record->errors) > 0) { $record->status = 'failed'; } else { $record->status = 'finished'; } //Update $record->update(); if ($record->hasErrors()) { MailerPlugin::log('MailerTask (' . $record->description . '): Last Step / Failed to update LogRecord: "' . implode('; ', $record->getErrors()) . '"', LogLevel::Error); } else { MailerPlugin::log('MailerTask (' . $record->description . '): Last Step / LogRecord successfully updated', LogLevel::Info); } } else { //Save to settings $this->getSettings()->log = $log; } //Clean & Return unset($log); unset($email); unset($recipients); return true; }
/** * Creates a recipients-array from User-Ids * * @param array $user_ids * @return array */ public function getUserRecipients($user_ids) { //Get all Users by ids $criteria = craft()->elements->getCriteria(ElementType::User); $criteria->id = $user_ids; $users = $criteria->find(); //Create recipients-array $recipients = array(); foreach ($users as $user) { $recipients[] = array('to' => $user->email); } //Check if (count($recipients) == 0) { MailerPlugin::log('getUserRecipients(): No Users found with IDs: "' . implode(', ', $user_ids) . '"', LogLevel::Error); return false; } else { MailerPlugin::log('getUserRecipients(): Number of valid Recipients: ' . count($recipients), LogLevel::Info); } return $recipients; }