Cuando se va a hacer una campaña de e-Mailing a veces es útil  conseguir estadísticas, saber si un correo existe, y si el tema que se le ha enviado le interesa o no.

Estas técnicas en manos maliciosas, pueden dar lugar a un spam más agresivo, pero eso sí, más efectivo.

 

Si presuponemos, que la gente abre solo aquellos correos que le resultan interesantes, entonces podemos llevar un control de correos existentes, campañas desarrolladas y clientes a los que les interesa un tema.

 

Ya que las técnicas de existencia de dirección de correo se basan en la práctica de envío y captura de error, o la consulta al servidor pop, para comprobar que correos han sido devueltos (este tema lo trataremos en un nuevo post). Hoy mostraremos como insertar un código en un correo y este que nos informe de si el correo ha sido abierto:

 

Como siempre nos centraremos en .NET para mostrar cómo hacerlo.

Lo primero es generarnos una clase en .net que envíe un correo electrónico, en mi caso sería  el método de envío es el siguiente:

/// <summary>

/// Envía un correo electrónico creado a partir de los datos pasados como parámetro

/// </summary>

/// <param name=”smptServer”>servidor smtp</param>

/// <param name=”usuarioCorreo”>Usuario con permisos para enviar el correo</param>

/// <param name=”passCorreo”>Password del usuario con permisos para enviar el correo</param>

/// <param name=”from”>Sender</param>

/// <param name=”to”>Destinatario</param>

/// <param name=”subject”>Asunto</param>

/// <param name=”body”>Cuerpo</param>

/// <param name=”isHtml”>True si es un mensaje con formato, false en caso contrario</param>

public static void EnviarEmail(string from, List<string> to, string subject, string body, bool isHtml,List<string> ListaAdjunto)

{

//Configuración del mensaje

#region mensaje

//Creamos el mensaje

MailMessage correo = new MailMessage();

 

//Quien lo envia

correo.From = new System.Net.Mail.MailAddress(from);

 

//destinatarios

foreach (string para in to)

{

correo.To.Add(para);

}

//Asunto

correo.Subject = subject;

//Cuerpo

correo.Body = body;

//¿Es un mensaje con formato?

correo.IsBodyHtml = isHtml;

//Prioridad en el envio

correo.Priority = System.Net.Mail.MailPriority.Normal;

 

#endregion

 

#region ArchivosAdjuntos

foreach (string adjunto in ListaAdjunto)

{

UTF8Encoding myEncoder = new UTF8Encoding();

byte[] bytes = myEncoder.GetBytes(adjunto.ToCharArray());

MemoryStream ms = new MemoryStream(bytes);

 

System.Net.Mime.ContentType cont = new System.Net.Mime.ContentType(“application/vnd.ms-excel”);

Attachment att = new Attachment(ms, “pedido.xls”, MediaTypeNames.Application.Octet);

 

correo.Attachments.Add(att);

}

#endregion

//Configuración servidor de correo.

 

#region envio

//definimos protocolo

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();

smtp.EnableSsl = (ConfigurationManager.AppSettings[“sslCorreo”].ToString()==”1″ ? true: false);

//indicamos el servidor smtp

smtp.Host =ConfigurationManager.AppSettings[“smtp”] ;

//le damos las credenciales para poder usar el servidor

smtp.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings[“usuarioMail”] , ConfigurationManager.AppSettings[“claveMail”] );

//enviamos

smtp.Send(correo);

 

#endregion

}

A este método se le pasa un texto formateado con HTML, y se le dice que el correo es HTML.

Al texto HTML que le pasamos le añadiremos una imagen con el atributo src que apunte a una dirección de una web con parámetros por la URL (get) esto nos permite recibirlos cuando el cliente abra el archivo.

mensaje.AppendLine(“<html>”);

mensaje.AppendLine(“<head>”);

mensaje.AppendLine(“<title>Gestion Editorial</title>”);

mensaje.AppendLine(“</head>”);

mensaje.AppendLine(“<body>”);

 

mensaje.AppendLine(this.Editor1.Content.ToString());

mensaje.AppendFormat(“<img src='{0}?user={1}’  style=’visibility:hidden; width:0.5px; height:0.5px;’  />”, ConfigurationManager.AppSettings[“Respuesta”].ToString(), item.Email_1);

mensaje.AppendLine(“</body>”);

 

mensaje.AppendLine(“</html>”);

mensaje.AppendLine(“”);

 

Esto es así, por la forma de funcionar del protocolo http, y del HTML. El protocolo http, es un protocolo desconectado, que inicia la descarga, y se desconecta cuando termina. La etiqueta img, abre una nueva conexión y se trae el archivo al que referencia. Si este archivo es una web, ejecutara  el código de la misma. Si a esta imagen le ponemos que sea oculta y además de tamaño ínfimo… pues obtenemos que la imagen solicita la página de destino, ejecutamos el load, donde recuperamos los parámetros y actualizamos nuestra base de datos. Así sabemos que el cliente abrió el correo, pero sin que el usuario se haya dado cuenta de lo que ha ocurrido, y sin depender de que acepte el envío de confirmación.

 

protected void Page_Load(object sender, EventArgs e)

{

string mail = Request.QueryString.Get(“user”).ToString();

 

GestionContactoBll.ActualizarIncidenciaContacto(mail, Entidades.TiposErrorMailing.ABIERTO_OK, “El usuario ha abierto el correo”);

}

Como veis es sencillo y no requiere de mucho esfuerzo, pero nos puede aportar un gran valor añadido a nuestras campañas de e-Mailing.

Anuncios