Saltar a contenido

Archivos adjuntos

El problema de los ficheros adjuntos

Los archivos adjuntos son un enemigo histórico del email marketing por, entre otras, las siguientes razones:

  • Los ficheros pueden contener virus u otras amenazas de seguridad.
  • Los ficheros adjuntos se incrustan en el email haciendo que éste ocupe mucho más espacio.
  • El envío de las campañas se vuelven más lentas.

Los proveedores de correo se ven obligados a analizar los ficheros en busca de virus y necesitan consumir más transferencia y ancho de banda para su gestión.

Es por ello que las herramientas de email marketing no suelen dar soporte o desaconsejan firmemente el uso de ficheros adjuntos.

Enlazar en lugar de adjuntar

La recomendación para los casos en los que se necesita enviar un fichero por email es enlazar dicho fichero en lugar de adjuntarlo, esto ofrece una serie de mejoras:

  • Los ficheros no se incrustan en el email, por lo que éste es más liviano.
  • Al utilizar enlaces es posible hacer un seguimiento de su apertura.
  • Se puede alterar el fichero una vez mandada la campaña.

Envío de ficheros adjuntos

A pesar de estar desaconsejado, teenvio permite el envío de ficheros adjuntos para algunos de sus planes. Para ello se pueden utilizar los siguientes parámetros en las peticiones de envío:

  • attachmen_base64raw: String con el contenido del fichero en base64
  • attachmen_filename: Nombre del fichero

Consultar los métodos POST /campaign/ y POST /bulkcampaign/ para más detalles.

Imágenes incrustadas

Existe la posibilidad incluir una imagen adjunta y que ésta sea utilizada en el HTML en luar de utilizar un recurso externo en su href. Esta funcionalidad corresponde con el _estándar rfc2392. Gracias a esto es posible visualizar una imágen sin que el gestor pregunte si deseamos mostrar recursos externos.

Para utilzar esta funcionalidad se debe de agregar un fichero adjunto con una imágen PNG o JPG cuyo combre coíncida con el nombre que tiene la imágen en la pieza o plantilla. El nombre del fichero en la plantilla no debe contener rutas y debe ser únicamente el nombre del fichero.

A tener en cuenta

Si nuestra creatividad solo tiene una imágen y utilizamos este método para incrutarla podemos tener un daño colateral: Los destinatarios puede que no autoricen el mostrado de recursos externos (al ya visualizarse la imágen principal) e impedir de este modo que la plataforma pueda saber las aperturas reales del envío.

Ejemplo utilizando el método para envío de transaccionales:

export TE_TOKEN='Your token'

curl -X POST https://app.teenvio.com/v4/public/api/rest/v3/bulkcampaign/ \
-H "X-Token: $TE_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '
{
    "rid" : 1,
    "name" : "transactional image test from api",
    "subject" : "subject transactional image email",
    "recipients" : [
        "contact1@domain.com",
        "contact2@domain.com"
    ],
    "vars" : {
        "descuento" : 20,
        "caducidad" : "noviembre"
    },
    "html_body" : "<html><img src=\"header.png\"><p>Hola mundo con imagen incrustada</p> <p>Por cierto, tu descuento del [[[descuento]]]% caduca en [[[caducidad]]]</p></body>",
    "attachmen_base64raw" : "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAHElEQVQ4y2M0+M9ANmBiYBjVPKp5VPOo5oHUDAAGPAFXwSLvZAAAAABJRU5ErkJggg==",
    "attachmen_filename" : "header.png"
}'
<?php

$token = 'Your token';

$url_base = 'https://app.teenvio.com/v4/public/api/rest/v3'

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_URL => $url_base.'/bulkcampaign/',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => array(
        'Accept: application/json',
        'X-Token: '.$token,
        'Content-Type: application/json'
    ),
    CURLOPT_POSTFIELDS => '
        {
            "rid" : 1,
            "name" : "transactional image test from api",
            "subject" : "subject transactional image email",
            "recipients" : [
                "contact1@domain.com",
                "contact2@domain.com"
            ],
            "vars" : {
                "descuento" : 20,
                "caducidad" : "noviembre"
            },
            "html_body" : "<html><img src=\"header.png\"><p>Hola mundo con imagen incrustada</p> <p>Por cierto, tu descuento del [[[descuento]]]% caduca en [[[caducidad]]]</p></body>",
            "attachmen_base64raw" : "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAHElEQVQ4y2M0+M9ANmBiYBjVPKp5VPOo5oHUDAAGPAFXwSLvZAAAAABJRU5ErkJggg==",
            "attachmen_filename" : "header.png"
        }
    '
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
import requests

token = 'Your token'

url_base = 'https://app.teenvio.com/v4/public/api/rest/v3'

my_headers = {
    'Accept' : 'application/json',
    'X-Token' : token,
    'Content-Type' : 'application/json'
}
post_request = {
    "rid" : 1,
    "name" : "transactional image test from api",
    "subject" : "subject transactional image email",
    "recipients" : [
        "contact1@domain.com",
        "contact2@domain.com"
    ],
    "vars" : {
        "descuento" : 20,
        "caducidad" : "noviembre"
    },
    "html_body" : "<html><img src=\"header.png\"><p>Hola mundo con imagen incrustada</p> <p>Por cierto, tu descuento del [[[descuento]]]% caduca en [[[caducidad]]]</p></body>",
    "attachmen_base64raw" : "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAHElEQVQ4y2M0+M9ANmBiYBjVPKp5VPOo5oHUDAAGPAFXwSLvZAAAAABJRU5ErkJggg==",
    "attachmen_filename" : "header.png"
}

response = requests.post(url_base+"/bulkcampaign/", json=post_request, headers=my_headers)

print(response.json())
const axios= require('axios');

const token = 'Your token';

const url_base = 'https://app.teenvio.com/v4/public/api/rest/v3';

const my_headers = {
    'Accept' : 'application/json',
    'X-Token' : token
};

const post_request = {
    "rid" : 1,
    "name" : "transactional image test from api",
    "subject" : "subject transactional image email",
    "recipients" : [
        "contact1@domain.com",
        "contact2@domain.com"
    ],
    "vars" : {
        "descuento" : 20,
        "caducidad" : "noviembre"
    },
    "html_body" : "<html><img src=\"header.png\"><p>Hola mundo con imagen incrustada</p> <p>Por cierto, tu descuento del [[[descuento]]]% caduca en [[[caducidad]]]</p></body>",
    "attachmen_base64raw" : "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAHElEQVQ4y2M0+M9ANmBiYBjVPKp5VPOo5oHUDAAGPAFXwSLvZAAAAABJRU5ErkJggg==",
    "attachmen_filename" : "header.png"
}

axios.post(url_base+'/bulkcampaign/', post_request, {headers:my_headers}).then(resp => {
    console.log(resp.data);
});

Respuesta:

{
    "action": "send_bulk_campaign",
    "time": "2022-10-26 14:39:29",
    "status": "OK",
    "response": 1334,
    "code": 0
}