/** * 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'); } }