miércoles, 30 de octubre de 2013

C#: Leer archivos adjuntos email con interops

El articulo de hoy expone un modo sencillo para leer los adjuntos de un correo de outlook usando la librería Microsoft.Office.Interop.Outlook en lenguaje C#. No sería un tema pionero ya que hay muchas librerías que permiten hacerlo desde hace tiempo pero aquí está por si alguien lo necesita.

En mi caso no consigo hacer que la gente suba la documentación a un aplicativo porque les llega por correo y pierden tiempo descargándolos fichero a fichero para posteriormente clasificarlos en la aplicación. La idea es proporcionarles una interfaz en el aplicativo de gestión que les permita seleccionar un correo, muestre todos sus adjuntos permitiendo seleccionar uno o varios y clasificarlos de manera rápida el mismo formulario.

Os paso el código:
public static class Lib 
{
   public static List<byte[]> LeerAdjuntosMail(string pMail) 
   {
    try
    {
     Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
     MailItem mail = app.CreateItemFromTemplate(pMail);
     List<byte[]> archivos = new List<byte[]>();

     foreach (Attachment adj in mail.Attachments) 
     {
       string filepath = string.Format(@"{0}\{1}", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), adj.DisplayName);
       adj.SaveAsFile(filepath);
       archivos.Add(FileToByte(filepath));
       System.IO.File.Delete(filepath);
     }
     return archivos;
     }
     catch (System.Exception ex)
     {
        throw ex;
     }
   }

   public static byte[] FileToByte(string sFullFileName)
   {
    try
    {
      byte[] bytes;
      // Declaramos fs para tener acceso al fichero residente en la maquina cliente.
      using (FileStream fs = new FileStream(sFullFileName, FileMode.Open))
      {
        using (BinaryReader br = new BinaryReader(fs))
        {
          bytes = new byte[(int)fs.Length];
          br.Read(bytes, 0, bytes.Length);
        }
      }
      return bytes;
      }
      catch (System.Exception ex)
      {
        throw ex;
      }
    }
}
El método LeerAdjuntosEmail espera como parámetro la ruta donde se ha descargado el email, de momento al ser una versión que no tengo claro que vayan a usar no perdemos demasiado tiempo en conectar a un buzón ni nada por el estilo si no que partimos del correo una vez descargado a disco para leer sus adjuntos (.msg).

Hasta aquí el artículo de hoy, podéis seguir areaTIC en las principales redes sociales, comentar y valorar todo lo que os apetezca y más. Hasta la semana que viene!

martes, 22 de octubre de 2013

Blogger: Formulario de contacto en una página

En el artículo Blogger: nuevos gadgets, seguidores de Google+, formulario de contacto y Wikipedia os comentaba la incorporación de 3 nuevos gadgets a Blogger. Bien, tras escribir el artículo me decidí a añadir el gadget Formulario de contacto en areaTIC.net, me puse manos a la obra pero digamos que la cosa no tenía buena pinta:

  • Al añadirlo como gadget, si no controlamos la visualización dependiendo de la URL, vemos que el formulario de contacto se nos repite en todas las entradas... mi idea era añadirlo en una página, no en las entradas. Buscamos en Google y rápidamente encontramos un blog dónde nos explican cómo añadir el gadget en una página estática.

  • Seguimos, el gadget formulario de contacto de Blogger sólo dispone de 3 campos y posiblemente nos gustaría añadir nuevos: una lista de selección, un check... no es posible, estas opciones no son configurables en el gadget formulario de contacto de Blogger.

  • Otro problema que me encuentro, el mail al que llega el formulario de contacto cuando es rellenado es aquel con el que entramos a Blogger y añadimos el gadget. No se puede cambiar ni añadir nuevos destinatarios del formulario de contacto de Blogger.

  • Para evitar que spambots puedan rellenar mi formulario de contacto e inundarme mi buzón de spam me gustaría que mi formulario de contacto tuviera un campo de tipo captcha y así asegurarme que quien lo rellena es una persona y no una máquina o servicio; con el gadget Formulario de contacto de Blogger esto no es posible.

Así que en este punto me planteo si vale la pena o no añadir un formulario de contacto en areaTIC.net... pero claro, los formularios de contacto mejoran la imagen de marca para los visitantes del blog, nos puede ayudar a mejorar las tasas de conversión,... hay que añadirlo. Buscando por aquí y por allá encuentro distintas herramientas para crear formularios: Kontactr, EmailMeForm, Foxyform, CloudContactForms... hay miles pero ninguna me convencía, básicamente porque las versiones gratuitas eran con funcionalidades bastante limitadas o incluían publicidad... y así hasta que dí con JotForm.


Nos registramos en un par de minutos y ya podemos acceder a la página principal donde vemos nuestros formularios y podemos crear nuevos. En la versión gratuita podemos crear formularios ilimitados, la restricción de espacio es de 100Mb, podemos tener 100 "submits" mensuales, 10 si son SSL y 10 recepciones de pago; para empezar es suficiente, la funcionalidades del formulario son las mismas en todas las versiones, las veremos más adelante.


Creamos (o editamos) un formulario, se muestra la siguiente pantalla donde tenemos las distintas opciones para personalizarlo. Os las detallo haciendo especial hincapié en aquellas que no podíamos hacer gadget formulario de contacto de Blogger.


  • Podemos añadir al formulario tantos campos como queramos, en la barra de menús de la izquierda tenemos diferentes tipos de campos: cajas de texto, desplegables, botones de radio, checks, posibilidad de subir ficheros, selectores, captchas, imágenes, campos para realizar pagos,... Pulsando sobre el menú superior "Estilo de forma" podemos elegir fuente, tamaño, alineación... y para los campos podemos indicar validaciones, subetiqueta, valor predeterminado, de solo lectura... vamos, que tenemos múltiples opciones de personalización. Por supuesto se puede modificar el texto del botón "Enviar".

  • Si pulsamos sobre el menú superior "Configuración e incrustación" encontraremos varias opciones, algunas de ellas muy interesantes:

    • La opción "Alertas de correo" nos permita generar notificaciones, cada una puede ser para un destinatario diferente y podemos personalizar el formato del mail que recibirá el destinatario.

    • La opción "Thank you" permite personalizar el mensaje que se muestra tras rellenar el formulario y pulsar el botón Enviar. Pocas herramientas permiten esto, normalmente es un mensaje estándar con publicidad de la herramienta utilizada para generar el formulario.

    • La opción "Insertar formulario" nos ofrece distintas opciones para añadir el formulario en nuestro sitio: iframe, embedido, popup,... así como instrucciones para añadirlo en diferentes plataformas como Wordpress, facebook, Drupal... Esto nos permite añadir nuestro formulario como un gadget, en una página estática,...

    • La opción "Condiciones" permite crear reglas sobre los campos del formulario, por ejemplo, que ciertos campos se oculten tras marcar un check o que según el valor escogido en un desplegable se envíe el mail a un destinatario u otro,...

  • En este punto tenemos todos los inconvenientes del gadget formulario de contacto de Blogger superados, todo ello a coste 0 (siempre que no hagamos un uso masivo), totalmente personalizable y sin ningún tipo de publicidad.

  • Otro punto que destacaría es el apartado "Form Templates" donde podemos encontrar más de 50 plantillas de formularios diferentes: contacto, evaluación, pago, reserva,...

Ya para acabar, en la sección CONTACTO de areaTIC.net podéis encontrar un formulario de contacto hecho con esta herramienta, sencillo, práctico y funcional. Hasta aquí el artículo de hoy, recordad que dentro de areaTIC podéis encontrar otros artículos interesantes, no dudéis en consultar nuestro archivo, también podéis seguirnos por RSS o las principales redes sociales (twitter, facebook, linkedin...).


miércoles, 16 de octubre de 2013

HTML, Javascript: Cómo obtener la posición absoluta de un elemento HTML

En un determinado momento nos podría interesar recuperar la posición x, y absoluta de un elemento HTML de nuestra página independientemente de cuántos elementos más hayan en la página. Esto podría sernos útil si estamos trabajando dentro un elemento canvas.

Por ejemplo, centrándonos en Canvas, si dibujamos un círculo tendríamos que indicarle la posición X, Y donde queremos que empiece.

x = 20;
y = 10;
radio = 10;
ctx.arc(x, y, radio, 0, 2 * Math.PI);

Esto dibujaría un círculo partiendo de la posición relativa que le hemos especificado dentro del canvas. Cuando hablamos de posición relativa quiere decir que los valores siempre son tomando como referencia la posición del Canvas. Es decir si el Canvas se visualiza en cliente en la posición x = 40 la posición absoluta donde empieza nuestra circunferencia sería 40 + 20.

Podríamos aplicar este código para determinar si se ha producido un click en un punto más a la derecha que nuestra circunferencia.

Eventoclick.x >= x + 40;

Dado este caso, suponiendo que tenemos el canvas en un nivel justo inferior al documento HTML lo único que nos influye son los márgenes de la página. Podemos recuperar sin problemas el valor donde se encuentra el canvas usando la propiedad offsetLeft (todos los elementos HTML tienen esta propiedad).

areaTIC: Cómo obtener la posición absoluta de un elemento HTML, figura 1
EventoClick.x >= x + canvas.offsetLeft;

Ahora supongamos un escenario que se ajusta más a la realidad donde el Canvas no está en la raíz del documento sino que tiene como “padre” un elemento Div que a su vez está situado a la derecha de otro elemento Div.

areaTIC: Cómo obtener la posición absoluta de un elemento HTML, figura 2

Es importante saber que la propiedad offsetLeft devolverá la posición relativa respecto al elemento HTML que lo contiene, por tanto el código anterior dejaría de funcionar. Para que vuelva a funcionar necesitaríamos calcular recursivamente e ir sumando los offsetLeft de cada uno de los elementos superiores al Canvas hasta llegar al elemento root.

Hasta aquí el ejemplillo. Os copio una función que he encontrado en stackoverflow para calcular posiciones absolutas que funciona a la perfección.
function getOffset( el ) {
    var _x = 0;
    var _y = 0;
    while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
        _x += el.offsetLeft - el.scrollLeft;
        _y += el.offsetTop - el.scrollTop;
        el = el.offsetParent;
    }
    return { top: _y, left: _x };
}
var x = getOffset( document.getElementById('yourElId') ).left; 
Hasta aquí el artículo de hoy, recordar como siempre que podéis areaTIC a través de las principales redes sociales y enviar vuestras valoraciones, comentarios, etc... que vaya bien la semana!

martes, 8 de octubre de 2013

SQL Server: 'TRUNCATE_ONLY' no es una opción BACKUP reconocida

Recientemente realizando unos tareas de mantenimiento en SQL Server 2008 me encontré con el error 'TRUNCATE_ONLY' no es una opción BACKUP reconocida. De entrada me extrañó porque de entrada todo era correcto y el script había utilizado anteriormente en SQL Server 2005 así que me puse a investigar; la secuencia de comandos utilizada era:

-- Truncamos registro de transacciones
USE[DatabaseName] BACKUP LOG [DatabaseName]WITH TRUNCATE_ONLY

-- Obtenemos error correspondiente
'TRUNCATE_ONLY' no es una opción BACKUP reconocida.

-- Debido al error anterior queda pendiente ejecutar la reducción del
-- registro de transaciones
-- USE [DatabaseName] DBCC SHRINKFILE ('DatabaseNameLog', 0)]

Lo primero, ir al MSDN a buscar información sobre el comando BACKUP en SQL Server 2008 donde nos encontramos el párrafo siguiente:

Las opciones BACKUP LOG WITH NO_LOG y WITH TRUNCATE_ONLY ya no se incluyen. Si usa el modelo de recuperación completa o el optimizado para cargas masivas de registros y debe quitar la cadena de copia de seguridad del registro de una base de datos, cambie al modelo de recuperación simple. Para obtener más información, vea Cambiar del modelo de recuperación completa al modelo de recuperación optimizado para cargas masivas de registros.

También en el artículo anterior podemos encontrar un enlace con información adicional sobre el truncamiento del registro de transacciones; básicamente (y simplificando) lo que nos viene a decir es que el truncamiento del registro de transacciones se produce automáticamente:

  • Después de un punto de control en el modelo de recuperación simple.

  • Tras una copia de seguridad del registro de transacciones en el modelo de recuperación completa si se cumplen ciertas condiciones (podéis verlas detalladas en el enlace anterior).

Buceando por distintos sitios parece desprenderse que la postura de Microsoft para eliminar la opción de BACKUP 'WITH TRUNCATE_ONLY' se debe al riesgo existente al forzar la eliminación de información del registro de transacciones. Según lo comentando anteriormente, y siguiendo las recomendaciones que Microsoft hace sobre el comando DBCC SHRINKFILE, si queremos reducir el tamaño del registro de transacciones podemos hacerlo cambiando el modelo de recuperación de la base de datos y luego restaurándolo:

-- Cambiamos modelo de recuperación a simple 
ALTER DATABASE [DatabaseName]
SET RECOVERY SIMPLE
GO
 
-- Reducimos tamaño del registro de transacciones
DBCC SHRINKFILE (DatabaseNameLog)
GO

-- Cambiamos modelo de recuperación a completa 
ALTER DATABASE [DatabaseName] 
SET RECOVERY FULL
GO

Habremos reducido el registro de transacciones y evitado el error 'TRUNCATE_ONLY' no es una opción BACKUP reconocida. Y hasta aquí el artículo de hoy, recordad que dentro de areaTIC podéis encontrar otros artículos interesantes, no dudéis en consultar nuestro archivo, también podéis seguirnos por RSS o las principales redes sociales (twitter, facebook, linkedin...).


LECTURAS RELACIONADAS RECOMENDADAS POR AREATIC.NET

martes, 1 de octubre de 2013

Blogger: nuevos gadgets, seguidores de Google+, formulario de contacto y Wikipedia

Recientemente Blogger ha incorporado a su lista de gadgets disponibles tres nuevos e interesantes gadgets que os describiré a continuación; además os indicaré paso a paso cómo podéis añadirlos a vuestro blog.

  1. Empezaremos hablando del gadget Seguidores de Google+, podéis encontrarlo en otras webs que lo denominan fanbox de Google+; básicamente es un gadget que muestra todos los contactos de nuestros círculos y que fácilmente permite a cualquier usuario añadirse. ¿De qué puede servir a nuestro blog los contactos? Podemos hacer que nuestros posts se añadan a Google+ y así todos nuestros contactos de Google+ tendrán fácil acceso a ellos sin necesidad de visitar nuestro blog, cuantos más contactos más posibilidad de atraer visitas a nuestro blog. El utilizar las redes sociales (Google+, LinkeIn, Facebook, Twitter,... para extender nuestros posts es una buena opción para conseguir aumentar las visitas de nuestro blog.

    En el artículo Seguidores en Facebook, Twitter, Google+ y LinkedIn os indicaba como añadir el fanbox de Google+, Facebook, Twitter y LinkedIn, todavía no existía el nuevo gadget Seguidores de Google+, os indico cómo añadirlo:

    • Entramos en Blogger, vamos a la sección 'Diseño' y pulsamos sobre 'Añadir un gadget'.


    • Dentro de la sección 'Lo básico' encontramos el nuevo gadget Seguidores de Google+, lo añadimos.


    • El siguiente paso es configurar el gadget Seguidores de Google+ indicando título, tamaño y gama de colores.
    • Guardamos la configuración del gadget Seguidores de Google+, la disposición en la sección 'Diseño' de nuestro blog y ya podemos ver el resultado.


  2. El siguiente nuevo gadget incorporado en Blogger es el gadget Formulario de contacto. Los formularios de contacto nos permiten recoger datos de nuestros visitantes (nombre, mail,...) y si los tratamos adecuadamente podemos convertir esos visitantes en futuros clientes. Por ejemplo, muchas webs te obligan a registrarte (Formulario de contacto) para descargarte una versión demo de un software... una vez descargado vas recibiendo mails de la web en cuestión con el objetivo que compres la versión completa del software; en resumen Formularios de contacto son una potente herramienta para convertir visitantes en clientes y de ahí que pueda ser interesante un gadget de este tipo en nuestro blog. Añadirlo es muy sencillo:

    • Como en el caso anterior, en la sección 'Diseño' pulsamos sobre 'Añadir un gadget'; en este caso vamos a la sección 'Más gadgets' donde veremos el nuevo gadget Formularios de Contacto.


    • Configuramos el gadget indicando el título.


    • Guardamos la configuración del gadget Formulario de contacto, la disposición en la sección 'Diseño' de nuestro blog y ya podemos ver el resultado. Los mensajes se recibirán en la cuenta de correo con la que accedes a tu blog.


  3. El último gadget incorporado en Blogger es el gadget Wikipedia que nos permite realizar búsquedas en la Wikipedia desde nuestro blog. El uso de este gadget puede resultar interesante para algunos blogs aunque todavía no le veo ningún aspecto que nos haga conseguir nuevas visitas o fidelizarlas, es más, cuando realizas una búsqueda y seleccionas uno de los resultados se abre una nueva ventana en el navegador y te muestra el contenido de la Wikipedia... este gadget lo que hace es aumentar el riesgo de fuga de nuestros visitantes. A pesar de eso os explicaré cómo añadirlo:

    • Como en el caso anterior, en la sección 'Diseño' pulsamos sobre 'Añadir un gadget'; en este caso vamos a la sección 'Más gadgets' donde veremos el nuevo gadget Wikipedia.


    • Configuramos el gadget indicando el título.


    • Guardamos la configuración del gadget Wikipedia, la disposición en la sección 'Diseño' de nuestro blog y ya podemos ver el resultado.


Y hasta aquí el artículo de hoy, si lo consideráis útil podéis añadir estos nuevos gadgets en vuestro blog. Recordad también que dentro de areaTIC podéis encontrar otros artículos interesantes, no dudéis en consultar nuestro archivo, también podéis seguirnos por RSS o las principales redes sociales (twitter, facebook, linkedin...)