File: /var/www/proveedores.bradford/application/helpers/sendgrid_mail_helper.php
<?php
require_once('sendgrid-php/sendgrid-php.php');
if (!defined('BASEPATH')) exit('No direct script access allowed');
use SendGrid\Mail\Mail;
use SendGrid\Mail\Attachment;
function enviarCorreoMail($data_mail)
{
// Datos del correo
$mensaje = $data_mail['mensaje'];
$asunto = $data_mail['asunto'];
$para = $data_mail['para'];
$de = $data_mail['remitente'];
// Crear instancia del correo
$email = new Mail();
try {
$email->setFrom($de, $data_mail['usuario']);
$email->setSubject($asunto);
$email->addTo($para, "");
// Añadir BCC si existe
if (!empty($data_mail['bcc_remitente'])) {
// Verificar si es un solo correo o una lista
$bccs = is_array($data_mail['bcc_remitente']) ? $data_mail['bcc_remitente'] : [$data_mail['bcc_remitente']];
foreach ($bccs as $bcc) {
try {
$email->addBcc($bcc);
} catch (Exception $e) {
error_log("Error al agregar BCC ($bcc): " . $e->getMessage());
}
}
}
} catch (Exception $e) {
error_log('Error al configurar el remitente o destinatario: ' . $e->getMessage());
return 0;
}
// Adjuntar archivos si existen
if (!empty($data_mail['attach'])) {
foreach ($data_mail['attach'] as $key => $value) {
try {
// Leer el contenido del archivo
$file_content = file_get_contents($value['path']); // Se espera que 'path' contenga la ruta completa del archivo
if ($file_content) {
// Convertir el contenido a base64
$encoded_content = base64_encode($file_content);
// Crear el attachment
$attachment = new Attachment();
$attachment->setContent($encoded_content);
$attachment->setType($value['type']); // Ejemplo: 'application/pdf'
$attachment->setFilename($value['file_name']); // Ejemplo: 'archivo.pdf'
$attachment->setDisposition('attachment');
$email->addAttachment($attachment);
} else {
error_log("No se pudo leer el archivo: " . $value['path']);
}
} catch (Exception $e) {
error_log("Error al agregar attachment: " . $e->getMessage());
}
}
}
// Contenido del correo
$email->addContent("text/html", $mensaje);
// Enviar el correo
$sendgrid = new \SendGrid($_ENV['API_KEY']);
$message_id = 0;
try {
$response = $sendgrid->send($email);
$array_headers = $response->headers();
foreach ($array_headers as $header) {
if (strpos($header, 'X-Message-Id') !== false) {
$message_id = str_replace('X-Message-Id: ', '', $header);
}
}
return $message_id;
} catch (Exception $e) {
error_log('Error al enviar correo: ' . $e->getMessage());
return 0;
}
}
## BREVO
function enviarCorreoMailBrevo($data_mail, $data_pdf = array())
{
$mensaje = $data_mail['mensaje'];
$asunto = $data_mail['asunto'];
$para = $data_mail['para'];
$de = $data_mail['remitente'];
if ($_ENV['TYPE_MODE'] != 'PRODUCTION') {
$para = $_ENV['SEND_MAIL_TEST'];
}
// URL de la API
$url = "https://api.sendinblue.com/v3/smtp/email";
// Datos del cuerpo de la solicitud
$data = array(
"sender" => array(
"name" => $_ENV['MAIL_FROM_NAME'],
"email" => $_ENV['MAIL_FROM_ADDRESS']
),
"to" => array(
array(
"email" => $para,
"name" => $para
)
),
"subject" => $asunto,
"htmlContent" => $mensaje,
"headers" => array(
"X-Mailin-custom" => "",
"charset" => "UTF-8"
)
);
// Agregar adjuntos si hay
if (!empty($data_mail['attach'])) {
$attachments = [];
foreach ($data_mail['attach'] as $file_path) {
if (file_exists($file_path['path'])) {
$attachments[] = array(
"name" => basename($file_path['file_name']),
"content" => base64_encode(file_get_contents($file_path['path']))
);
}else{
}
}
if (!empty($attachments)) {
$data['attachment'] = $attachments;
}
}
// Cabeceras de la solicitud
$headers = array(
"accept: application/json",
"api-key: " . $_ENV['MAIL_PASSWORD'],
"content-type: application/json"
);
// Inicializar la sesión cURL
$curl = curl_init();
// Configurar opciones cURL
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
// Ejecutar la solicitud y obtener la respuesta
$response = curl_exec($curl);
// Manejar errores si es necesario
if (curl_errno($curl)) {
$resp = 'error';
// echo 'Error en la solicitud cURL: ' . curl_error($curl);
} else {
$resp = 'ok';
}
// Cerrar la sesión cURL
curl_close($curl);
// Imprimir la respuesta
// pre_die($resp);
return $resp;
}