De programacion y otros demonios

miércoles, 13 de enero de 2010

SSIS - Paso a paso Como enviar correo

Cada vez que desarrollamos un paquete SSIS y se ejecuta automáticamente a través del SQL Agent como un Job o como una tarea programada de Windows y dependiendo de la importancia del proceso es bueno tener un mecanismo que nos permita saber si ese proceso (supongamos que se ejecuta de noche), termino exitosamente o si falló (para así llegar a las 6 AM a ejecutarlo manualmente jajaja).

Hay algo sencillo para hacer: enviar un correo.  Si termino bien o mal que envíe un correo avisando al operador.  Les explicaré paso a paso:


1. Crea una conexion SMTP. Dá clic derecho sobre el panel y elije New Connection, selecciona SMTP Connection.

2. Configura la conexion. En SMTP debes colocar el nombre de tu servidor de correo, como muestra la imagen.

3. Arrastra un componente Script Task, este nos servira para el ejemplo; en tu paquete puede ser un contenedor, una tarea sql, etc


Mira la imagen a la derecha, aquí hago 3 envios de correo. El primero arriba depende de que se complete la tarea anterior y que se cumpla la expresion (observa que tiene un cuadro llamado fx, asi sabemos que en esa flecha hay una condicion que se debe cumplir para que ese componente se ejecute). 

El segundo envia correo si la tarea anterior fue exitosa (flecha verde).  El ultimo abajo a la derecha es si la tarea termino con fallo (flecha roja) y además debe cumplir una condicion (fx).
Bueno, manos a la obra.....

4. Arrastra una tarea de envío de correo (Send Mail Task)

5. Hagamos el correo de fallo. Dá clic izquierdo sobre la Script Task, alli te aparecerá una flecha verde.  Dá clic sostenido sobre la flecha y suéltalo sobre el Send Mail Task.  Ahora dá doble clic sobre la flecha que conecta los dos componentes, te aparecerá una pantalla similar a esta:



Para el ejemplo, mi paquete debe crear un archivo plano con información de clientes, si se genera con tamaño cero, o el paquete falla en su ejecución debe enviar un correo al operador informandole.

Anteriormente en otro componente he leido el tamaño del archivo y se lo he asignado a la variable V_SIZE_FILE.  En la operación de evaluación he puesto Expression And Constraint, es decir, para el envio de correo la tarea debe cumplir las dos condiciones:
- que haya terminado con fallo
- y que la variable sea de tamaño cero


6. Por último vamos a configurar el Send Mail Task, da doble clic sobre el componente.  Elije como SmtpConnection la que creamos en el paso 1.

Allí configura el destinatario (en mi caso que le llegue al operador@hotmail.com para que piense que hacer); el remitente puede ser cualquier cuenta de correo, en mi caso es ficticia podria ser el nombre del paquete (ej. ETL_crearPlanoClientes@hotmail.com) esto es buena idea si tienes varios paquetes programados, te da una idea rápida de que se trata.

En MessageSource escribe el cuerpo del mensaje, algo como: Ocurrio un error y no se generó el plano de clientes.

Etiquetas:

10 comentarios:

  • Hola, en que componentes lees el peso del archivo?, y como lo haces?

    De Anonymous Anónimo, A las 16 de abril de 2010, 13:55  

  • Hola, Detallada tu explacion, pero bueno recien comienzo a investigar y no veo que coloques la autenticas de la cuenta, a menos que la hagas con una cuenta configurada en outlook en la misma pc.
    Saludos

    De Anonymous Anónimo, A las 28 de mayo de 2010, 7:20  

  • ¿Y cómo seteo el expression?...Es decir, supongamos que deseo enviar el mail con la cantidad de filas "nuevas", o registros cargados en "X" tabla....

    Gracias por el apoyo...

    De Blogger Paul, A las 27 de agosto de 2011, 10:57  

  • Paul,

    que pena responder tan tarde pero tal vez le sirva esta idea - solucion a alguien mas (estaba de super vacaciones del blog).

    Si quieres enviar la cantidad de registros nuevos deberias colocarlos en un archivo, y setear el componente Mail para que envíe el archivo como adjunto; me parece mejor que enviarlas en el cuerpo del mail pues pueden llegar a ser muchos registros.

    Bye

    De Blogger sobenavi, A las 12 de enero de 2012, 10:56  

  • ¿como coges el tamaño del archivo para guardarlo en la variable? porque no encuentro nada al respecto en ningun sitio

    De Anonymous Anónimo, A las 24 de febrero de 2012, 3:30  

  • Anonimo:

    Para el tamaño del archivo tendrias que agregar un script donde a traves de visual basic (o C#) con el metodo .size() o length() puedas conocerlo...

    Bye

    De Blogger sobenavi, A las 24 de febrero de 2012, 4:57  

  • Tengo un problema en mandar correo, cuando pongo el paquete en produccion, lo desplegue en el sistema de fichero, sin encriptacion y no me manda los correos. Ya reemplace el componente send mail task por un script task donde mando el correo desde el codigo. Todo esto me funciona en desarrollo. Porque en produccion no?

    De Anonymous Anónimo, A las 29 de marzo de 2012, 11:31  

  • Hola!!

    Muchas gracias por este post y por el blog. Tengo una duda con la configuración de la conexión y es que no se donde indicas el usuario y la contraseña para el logueo en el servidor smtp. Yo estoy intentando hacer lo mismo con una cuenta gmail pero no soy capaz.

    Un saludo

    De Anonymous Anónimo, A las 25 de agosto de 2012, 6:16  

  • Hola sabes como agregar html al cuerpo del mensaje, usualmente el texto no es muy pro que digamos.
    Te felicito por tu blog

    De Blogger Unknown, A las 9 de septiembre de 2013, 7:21  

  • dberias poner videoss :))

    De Anonymous Anónimo, A las 4 de noviembre de 2013, 13:05  

Publicar un comentario



<< Inicio