Revert "fix(correo): un solo camino de envio, el directo, y fuera el proxy"

El proxy no era prescindible: el container de las webs de Forge NO tiene MTA.
`which sendmail mail postfix ssmtp msmtp exim4` no devuelve nada y
`sendmail_path` apunta a /usr/sbin/sendmail, que no existe. Con $smtp = false
PHPMailer cae a mail() de PHP y ahi no sale nada, en silencio.

Medido sobre las webs de Forge:

  26  configuran CocoEmail::$smtp = true propio  -> enviarian igual
  57  NO configuran SMTP                         -> se quedaban SIN correo

Entre esas 57 esta cdn-ecommerce, que es justo la web de pruebas. Se vuelve a
la version condicional: proxy cuando hay .acai (Forge/test) y directo cuando no
(legacy de produccion). Cubre los tres casos, porque el proxy reenvia con el
smtp_data que le llega en el payload, asi que las 26 con SMTP propio siguen
saliendo por su servidor.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jordan Diaz
2026-09-03 20:19:22 +00:00
co-authored by Claude Opus 5
parent f279d7d1d3
commit 3615d85bc0
+75 -1
View File
@@ -163,10 +163,38 @@ class CocoEmail {
if (!$subject && $record) $subject = t($record, self::$field_subject);
// El correo sale por dos caminos segun el entorno, y esta era la unica
// divergencia real entre el core de Forge y el de las webs legacy:
// web-base mandaba SIEMPRE por el proxy y core_client SIEMPRE directo,
// asi que el fichero no se podia unificar sin cambiarle el
// comportamiento a media plataforma. Con la condicion delante, el mismo
// fichero vale para los dos canales.
//
// En local/test hace falta el proxy: el envio directo no sale de ahi.
// En produccion se mantiene el directo, que es lo que han hecho siempre
// esas webs.
//
// Mismo criterio de deteccion que header.php:81 — un `.acai` en la raiz
// de la web marca entorno local. Se comprueba en linea a proposito, sin
// depender de que otro fichero haya definido nada (ver el commit
// f81c5a2 de web-base, "el entorno se detecta en linea").
// Desde cms/lib/classes/ la raiz esta tres niveles arriba.
$esEntornoLocal = is_file(dirname(__FILE__) . '/../../../.acai');
// Se devuelve array en los dos caminos. El directo no devolvia nada
// (core_client) y el del proxy si (web-base): unificar hacia el array es
// aditivo — quien ignoraba el retorno lo sigue ignorando.
$result = [];
foreach ($to as $destinatario) {
self::send_email($destinatario, $subject, $content);
if ($esEntornoLocal) {
$resultString = self::send_email_coco_proxy($destinatario, $subject, $content);
$result[] = @json_decode($resultString,true) ?: ["success" => false, "message" => "Error decoding response", "raw_response" => $resultString];
} else {
$result[] = self::send_email($destinatario, $subject, $content);
}
}
self::$attach_files = [];
return $result;
}
/*
options : [
@@ -254,6 +282,52 @@ class CocoEmail {
}, array_change_key_case($arr));
}
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
static function send_email_coco_proxy($destinatario="soporte@cocosolution.com", $asunto="Error al enviar correo", $contenido="", $respuesta="") {
$data = [
"smtp_data" => self::$smtp_data,
"mail_data" => self::$mail_data,
"replyTo" => self::$replyTo,
"send_copy_to" => self::$send_copy_to,
"params" => [
"to" => $destinatario,
"subject" => $asunto,
"body" => $contenido
],
"bloqued_emails" => self::$bloqued_emails,
"encode_with_base64" => self::$encode_with_base64,
"template" => self::$template,
"styles" => self::$styles,
"header" => self::$header,
"footer" => self::$footer
];
//$encryptData = self::encrypt(json_encode($data), "Analiticaempresas17");
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => json_encode($data)
)
);
$context = stream_context_create($opts);
$result = file_get_contents("https://cocosolution.com/?sendQuantumEmail=1", false, $context);
return $result;
}
static function send_email($destinatario="soporte@cocosolution.com", $asunto="Error al enviar correo", $contenido="", $respuesta="") {
global $configuracionRecord;