---
title: actionEmailSendBefore
section: hooks
slug: actionEmailSendBefore
hook_type: action
category: email
location: FO+BO
since_version: 1.5
source_url: "https://ayudaprestashop.es/hooks/actionEmailSendBefore"
---

# Hook `actionEmailSendBefore`

| Propiedad | Valor |
| --- | --- |
| Tipo | Action |
| Localizacion | FO+BO |
| Categoria | email |
| Desde version | 1.5 |

## Descripcion

Se ejecuta justo antes de que un email sea enviado por PrestaShop. Permite modificar el contenido del email, cambiar destinatarios, añadir adjuntos o incluso cancelar el envio completamente. Es extremadamente util para personalizar comunicaciones, implementar sistemas de logging de emails o integrar con servicios de email transaccional externos.

## Parametros

| Nombre | Tipo | Requerido | Descripcion |
| --- | --- | --- | --- |
| `idLang` | `int` | si | ID del idioma del email |
| `template` | `string` | si | Nombre de la plantilla de email (ej: 'order_conf', 'new_order') |
| `subject` | `string` | si | Asunto del email |
| `templateVars` | `array` | si | Variables de la plantilla (pares clave-valor para sustitucion en el template) |
| `to` | `string` | si | Direccion de email del destinatario |
| `toName` | `string` | si | Nombre del destinatario |
| `from` | `string` | si | Direccion de email del remitente |
| `fromName` | `string` | si | Nombre del remitente |
| `fileAttachment` | `array\|null` | no | Archivos adjuntos (array con 'content', 'name', 'mime') |
| `mode_smtp` | `bool\|null` | no | Si se usa SMTP personalizado |
| `templatePath` | `string` | si | Ruta a la carpeta de plantillas |
| `die` | `bool` | no | Si PHP debe terminar despues del envio |
| `idShop` | `int` | si | ID de la tienda |

## Valor de retorno

- **Tipo**: `void`
- **Descripcion**: Puede establecer $params['send'] = false para cancelar el envio del email

## Disparado por

| Contexto | Clase | Metodo | Fichero |
| --- | --- | --- | --- |
| Mail | `Mail` | `send()` | `classes/Mail.php` |

**Paginas**: `*`

## Registro del hook

```php
<?php
public function install()
{
    return parent::install()
        && $this->registerHook('actionEmailSendBefore');
}
```

## Ejemplo de uso

```php
<?php
/**
 * Hook actionEmailSendBefore — antes de enviar email
 */
public function hookActionEmailSendBefore(array &$params)
{
    $template = $params['template'];
    $to = $params['to'];

    // Ejemplo 1: Registrar todos los emails enviados
    Db::getInstance()->insert('mymodule_email_log', [
        'template'    => pSQL($template),
        'subject'     => pSQL($params['subject']),
        'recipient'   => pSQL($to),
        'id_lang'     => (int) $params['idLang'],
        'id_shop'     => (int) $params['idShop'],
        'date_add'    => date('Y-m-d H:i:s'),
    ]);

    // Ejemplo 2: Añadir variable personalizada a todos los emails
    $params['templateVars']['{mymodule_phone}'] = Configuration::get('MYMODULE_SUPPORT_PHONE');
    $params['templateVars']['{mymodule_whatsapp}'] = Configuration::get('MYMODULE_WHATSAPP');

    // Ejemplo 3: Cancelar emails de confirmacion de pedido para un grupo especifico
    if ($template === 'order_conf') {
        $customer = Customer::getCustomersByEmail($to);
        if (!empty($customer)) {
            $idGroup = (int) $customer[0]['id_default_group'];
            if ($idGroup === (int) Configuration::get('MYMODULE_NO_EMAIL_GROUP')) {
                $params['send'] = false; // Cancelar envio
                return;
            }
        }
    }

    // Ejemplo 4: Añadir copia oculta al admin en emails de pedido
    if (in_array($template, ['order_conf', 'payment', 'shipped'])) {
        $params['bcc'] = Configuration::get('PS_SHOP_EMAIL');
    }
}
```

## Notas y gotchas

- El parametro $params debe pasarse por REFERENCIA (&$params) para poder modificar valores o cancelar el envio.
- Establece $params['send'] = false para cancelar el envio del email sin generar errores.
- Los nombres de template comunes son: 'order_conf', 'new_order', 'payment', 'shipped', 'order_return_state', 'contact'.
- Las variables de plantilla usan formato {variable} — asegurate de incluir las llaves.
- Este hook se ejecuta para TODOS los emails de la tienda, incluyendo los del back office.
- Cuidado con bucles infinitos: no envies emails dentro de este hook.

## Hooks relacionados

- [`actionGetExtraMailTemplateVars`](https://ayudaprestashop.es/hooks/actionGetExtraMailTemplateVars)

## Guias relacionadas

- [modules/main-file](https://ayudaprestashop.es/modules/main-file)
- [email/email-templates](https://ayudaprestashop.es/email/email-templates)

## Historial de versiones

| Version | Cambio |
| --- | --- |
| 1.5 | Introducido con los parametros basicos |
| 1.6 | Añadida la posibilidad de cancelar con send = false |
| 1.7 | Sin cambios. Compatible con PS 1.7, 8.x y 9.x |


---

*Fuente: [https://ayudaprestashop.es/hooks/actionEmailSendBefore](https://ayudaprestashop.es/hooks/actionEmailSendBefore). Version Markdown generada automaticamente para consumo por LLMs.*
