lunes, 31 de enero de 2011

Envío de correos electrónicos en NAV mediante Outlook

Navision tiene la posibilidad de enviar correos mediante la Code Unit 400 y  el Automation ‘Microsoft Navision Mail.SmtpMessage‘, que se registra en la instalación del cliente de Navision.
Gracias a esto tenemos la posibilidad de realizar desarrollos que nos permitan por ejemplo enviar correos electrónicos a nuestros clientes adjuntando sus facturas.
Este Automation nos es muy útil pero a su vez es limitado. En ocasiones queremos poder tener más potencia en cuanto al envío de correos electrónicos. Este tipo de características que no son cubiertas, las podemos cubrir en muchos casos con los Automations de Outlook.
Gracias a estos Automations, podremos por ejemplo mandar los correos con acuse de recibo y lectura, enviar correos con plantillas creadas en Outlook e incluso interactuar con sus contactos. Para ello en cada  equipo cliente de Navision deberemos de tener instalado y configurado un cliente de Outlook (versión 2003 en adelante).
Vamos a ver un ejemplo de un envío de correo con adjunto, con acuse de recibo y lectura y con una plantilla creada en Outlook.

Para el ejemplo he utilizado Microsoft Dynamics NAV R2 con Outlook 2003.

Lo primero será tener un plantilla de Outlook (*.oft) con el diseño deseado. Nótese que la función de plantillas es incompatible con la función de escribir un cuerpo en el correo, es decir o decidimos poner una plantilla o escribir el cuerpo con el texto deseado.
Creamos las siguientes variables en la Code Unit donde vayamos a poner el código:

Name   DataType         Subtype           Length
OMail  Automation      'Microsoft Outlook 11.0 Object Library'.MailItem
OApp  Automation      'Microsoft Outlook 11.0 Object Library'.Application

Y el código sera el siguiente:
//Envío correo mediante dll Outlook
IF ISCLEAR(OApp) THEN
  CREATE(OApp,FALSE,TRUE);

//OMail := OApp.CreateItem(0);//Si no utilizamos plantillas
OMail := OApp.CreateItemFromTemplate('C:\Plantilla Correos\plantilla.oft');

OMail."To" := 'correodestino@correo.com';
OMail.Attachments.Add('C:\Plantilla Correos\adjunto.xml'); //Si queremos adjuntar un fichero
OMail.Subject := 'Asunto del correo';
//OMail.Body := 'El cuerpo del mensaje'; //O ponemos este código o el de la plantilla.
OMail.OriginatorDeliveryReportRequested := TRUE; //Confirmación de recepción.
OMail.ReadReceiptRequested := TRUE; //Confirmación de lectura.
OMail.Send;

Como curiosidad debido a un tema de límite de tamaño interno de nombres cuando escribimos o seleccionamos la función OMail.OriginatorDeliveryReportRequested, Navision nos copia OMail.OriginatorDeliveryReportRequest, con lo que cada vez que entramos en la Code Unit y modificamos código nos da error de que no existe la variable OriginatorDeliveryReportRequest porque no reconoce ese nombre y debemos de poner ‘ed’ al final del nombre de la función cada vez.

4 comentarios:

  1. Hola.
    Utilizo este código y funciona bien. Pero ahora quiero mandar correos sin adjuntar nada, y no lo consigo. Comento la sentencia Omail.Attachments.Add, y al ejecutar el programa sale un error en el send.
    ¿me podeis ayudar?

    Gracias.

    Pedro

    ResponderEliminar
    Respuestas
    1. Hola Pedro! Podrías decirme exactamente cual es el error que te da?

      Eliminar
    2. Hola Albertino.

      Ya he conseguido solucionar el problema.
      La verdad es que como siempre que he mandado un correo en Navision he adjuntado algo pues no me había dado cuenta. El tema estaba que por costumbre siempre que mandaba correos a través de Navision tenia el programa Outlook cerrado, (la verdad es que no se porqué, serían manias mias). Pues bien para mandar correos sin NADA ADJUNTO hay que tener el Outlook INICIADO, si no lo tienes da el error que te indique en el anterior correo.

      Así que así se queda.

      Gracias por todo, y hasta la próxima.

      Saludos

      Pedro Segura

      Eliminar
  2. Hola Albertino, gracias por contestar.

    El error que me da si comento la línea :

    ///OMail.Attachments.Add(Adjunto);

    Es :

    No se ha podido invocar el miembro Send.
    El control OLE o servidor de Automation ha devuelto un código de error desconocido

    ¿Qué es lo que hay que hacer para mandar un correo son adjuntar nada?.

    Gracias por tu ayuda.

    Te pongo mi cuenta de correo :

    psegura@manan.es






    ResponderEliminar