コード例 #1
0
ファイル: EmailSendQueue.php プロジェクト: syscover/comunik
 public static function deleteMailingWithoutGroupSendQueue($groups, $campaign)
 {
     EmailSendQueue::where('campaign_id_047', $campaign)->where('status_id_047', 0)->whereNotIn('contact_id_047', function ($query) use($groups) {
         $query->select('contact_id_042')->from('005_042_contacts_groups')->whereIn('group_id_042', $groups)->groupBy('contact_id_042')->get();
     })->delete();
 }
コード例 #2
0
ファイル: Cron.php プロジェクト: syscover/comunik
 /**
  *  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');
     }
 }
コード例 #3
0
 public function updateCustomRecord($parameters)
 {
     $htmlLinks = ComunikLibrary::setMailingLinks($this->request, $parameters);
     EmailCampaign::where('id_044', $parameters['id'])->update(['name_044' => $this->request->input('name'), 'email_account_id_044' => $this->request->input('emailAccount'), 'template_id_044' => empty($this->request->input('template')) ? null : $this->request->input('template'), 'subject_044' => $this->request->input('subject'), 'theme_044' => $this->request->input('theme'), 'header_044' => $htmlLinks['header'], 'body_044' => $htmlLinks['body'], 'footer_044' => $htmlLinks['footer'], 'text_044' => $htmlLinks['text'], 'data_044' => $this->request->input('data', 'NULL'), 'shipping_date_044' => $this->request->has('shippingDate') ? \DateTime::createFromFormat(config('pulsar.datePattern') . ' H:i', $this->request->input('shippingDate'))->getTimestamp() : (int) date('U'), 'shipping_date_text_044' => $this->request->has('shippingDate') ? $this->request->input('shippingDate') : date(config('pulsar.datePattern') . ' H:i'), 'persistence_date_044' => $this->request->has('persistenceDate') ? \DateTime::createFromFormat(config('pulsar.datePattern') . ' H:i', $this->request->input('persistenceDate'))->getTimestamp() : null, 'persistence_date_text_044' => $this->request->has('persistenceDate') ? $this->request->input('persistenceDate') : null, 'sorting_044' => $this->request->has('sorting') ? $this->request->input('sorting') : null]);
     $emailCampaign = EmailCampaign::find($parameters['id']);
     $emailCampaign->getCountries()->sync($this->request->input('countries'));
     $emailCampaign->getGroups()->sync($this->request->input('groups'));
     // borramos los envíos de cola, de aquellos correos en estado, status_id_047 = 0 waiting
     // que no correspondan con los nuevos grupos, caso muy dificil de ocurrir,
     // ya que solo se pasan a cola cuando van a ser enviados
     EmailSendQueue::deleteMailingWithoutGroupSendQueue($this->request->input('groups'), $emailCampaign->id_044);
 }