Example #1
0
 /**
  *  Function that sends emails
  *
  * @access	private
  * @return	array
  */
 private static function sendEmails()
 {
     $emailServiceSendingEmails = Preference::getValue('emailServiceSendingEmails', 5, '0');
     // Comprobación para casos de errores o caídas del servidor, y no dejen bloquedo el envío de emails
     // si en 5 minutos no se ha liberado la variable, damos por hecho que se ha bloqueado y la liberamos
     $update = \DateTime::createFromFormat('Y-m-d H:i:s', $emailServiceSendingEmails->updated_at);
     if ($emailServiceSendingEmails->value_018 == '1' && date('U') - $update->getTimestamp() > 300) {
         Preference::setValue('emailServiceSendingEmails', 5, '0');
     }
     //en el caso que el estado de envio esté activo, eso siginifica que hay una petición en curso y está haciendo la petición
     //a la base de datos y esta sustrayendo los ids, para posteriormente cambiar el estado de envíos, solo en ese momento
     //cambiaremos el estado de envío de emails para poder aceptar más peticiones, de esa manera nos aseguramos que no hayan
     //varias peticiones concurrentes del gestor de colas.
     if ($emailServiceSendingEmails->value_018 == '1') {
         exit;
     } else {
         Preference::setValue('emailServiceSendingEmails', 5, '1');
     }
     // consultamos la cola de envíos que estén por enviar, solicitamos los primero N envíos según el itervalo configurado
     // solo de aquellos envíos que estén en estado: 0 = waiting to be sent
     $mailings = EmailSendQueue::getMailings((int) Preference::getValue('emailServiceIntervalProcess', 5)->value_018, 0);
     $mailingIds = $mailings->pluck('id_047')->toArray();
     if (count($mailings) > 0) {
         // cambiamos el estado de EmailSendQueue para que se puedan hacer peticiones
         EmailSendQueue::whereIn('id_047', $mailingIds)->update(['status_id_047' => 1]);
         // desbloqueo de proceso de obtención de emails para ser enviados y se puedan hacer peticiones
         Preference::setValue('emailServiceSendingEmails', 5, '0');
         $successfulIds = [];
         foreach ($mailings as $mailing) {
             // Creamos el historico de envío con antelación para obtener el ID del histórico de envío y contabilizarlo
             $emailSendHistory = EmailSendHistory::create(['send_queue_id_048' => $mailing->id_047, 'campaign_id_048' => $mailing->campaign_id_047, 'contact_id_048' => $mailing->contact_id_047, 'create_048' => $mailing->create_047, 'sent_048' => date('U'), 'viewed_048' => 0]);
             $dataEmail = ['replyTo' => empty($mailing->reply_to_013) ? null : $mailing->reply_to_013, 'email' => $mailing->email_041, 'html' => $mailing->header_044 . $mailing->body_044 . $mailing->footer_044, 'text' => $mailing->text_044, 'subject' => $mailing->subject_044, 'contactKey' => Crypt::encrypt($mailing->id_041), 'company' => isset($mailing->company_041) ? $mailing->company_041 : '', 'name' => isset($mailing->name_041) ? $mailing->name_041 : '', 'surname' => isset($mailing->surname_041) ? $mailing->surname_041 : '', 'birthDate' => isset($mailing->birth_date_041) ? date(config('pulsar.datePattern'), $mailing->birth_date_041) : '', 'campaign' => Crypt::encrypt($mailing->id_044), 'historyId' => Crypt::encrypt($emailSendHistory->id_048)];
             // config SMTP account
             config(['mail.host' => $mailing->outgoing_server_013]);
             config(['mail.port' => $mailing->outgoing_port_013]);
             config(['mail.from' => ['address' => $mailing->email_013, 'name' => $mailing->name_013]]);
             config(['mail.encryption' => $mailing->outgoing_secure_013 == 'null' ? null : $mailing->outgoing_secure_013]);
             config(['mail.username' => $mailing->outgoing_user_013]);
             config(['mail.password' => Crypt::decrypt($mailing->outgoing_pass_013)]);
             // exec mailing
             $response = EmailServices::SendEmail($dataEmail);
             if ($response) {
                 // delete message from queue
                 EmailSendQueue::where('id_047', $mailing->id_047)->delete();
             } else {
                 // error de envío, eliminamos el histórico antes creado
                 EmailSendHistory::destroy($emailSendHistory->id_048);
             }
         }
     } else {
         // desbloqueo de proceso de obtención de emails para ser enviados y se puedan hacer peticiones
         Preference::setValue('emailServiceSendingEmails', 5, '0');
     }
 }
 public function recordStatistic()
 {
     // get parameters from url route
     $parameters = $this->request->route()->parameters();
     // if it's a test email, we brake execution
     if ($parameters['historyId'] === '0') {
         exit;
     }
     $campaign = Crypt::decrypt($parameters['campaign']);
     $historyId = Crypt::decrypt($parameters['historyId']);
     // add a viewed to the campaign
     EmailCampaign::where('id_044', $campaign)->increment('viewed_044');
     // add a viewed to the historical
     EmailSendHistory::where('id_048', $historyId)->increment('viewed_048');
 }