Enviar email desde tus apps Xojo

¿Te has planteado alguna vez enviar correo electrónico desde tus aplicaciones multiplataforma Xojo? Seguro que sí, ya sea para enviar la factura en formato PDF a tus clientes, documentación adicional como resultado de un proceso, o bien si se trata de algún sistema de gestión de tickets o de márketing… ¡las posibilidades son realmente amplias! ¿Sabes qué? No importa cual sea el motivo, lo verdaderamente importante es que gracias al framework encontrarás realmente sencillo implementarlo. A continuación te explico los sencillos pasos involucrados.

Para enviar correo electrónico desde tus aplicaciones Xojo de Consola, Desktop, Web y RaspberryPi son principalmente tres las clases involucradas: SMTPSocket (o en su versión segura con SMTPSecureSocket), EmailMessage y EmailAttachment mediante la cual podremos adjuntar los documentos necesarios en la composición de un nuevo mensaje. Por supuesto, si necesitas gestionar una mayor cantidad de detalles en el envío de tus mensajes de correo electrónico. Por ejemplo, con EmailHeaders también puedes añadir, borrar o consultar las cabeceras asociadas a un mensaje de correo electrónico. Por otra parte, si bien en este tutorial nos enfocamos en el envío de mensajes, también encontrarás en el framework las clases que te permitirán recibir los mensajes de correo electrónico en tus aplicaciones Xojo.

Crear una conexión con el servidor

SMTP es el protocolo de transmisión simple de correo electrónico y que, a muy grandes rasgos, está implementado en prácticamente cualquiera de los servidores de alojamiento que podamos contratar. Para poder poner en marcha nuestro proceso de comunicación necesitaremos conocer los siguientes datos por parte de nuestro proveedor (o bien uno genérico, como pueda ser Gmail):

  • Dirección del servidor SMTP al que debemos conectarnos. Generalmente en la forma smtp.miDominio.com.
  • Puerto del servidor. Por lo general los puertos habilitados son el 25 o bien el 587. Esta información se suministra por el proveedor.
  • Usuario y contraseña. Cada vez son menos los servidores SMTP que permiten su uso sin una previa autenticación de usuario y contraseña con el objetivo de que establecer la conexión y certificar, de este modo, que estamos autorizados a su uso y no se va a realizar un envío indiscriminado por parte de cualquier usuario que simplemente conozca la dirección del servidor SMTP. Esta información suele coincidir con la misma que utilicemos para acceder a la cuenta de correo electrónico asociada con el proveedor.

Una vez tengamos estos datos, ya podremos realizar el primero de los pasos desde nuestra aplicación. Es más que recomendable cifrar la información sensible en nuestro código de Xojo, tal y como pueden ser en estos casos el nombre de usuario, contraseña y dirección SMTP del servidor, de modo que esta no esté en claro si se examina el código de nuestra aplicación con un simple editor. En el código de ejemplo, esta información está representada mediante el uso de constantes. Así, el código para establecer la conexión sería el siguiente:

Dim nmm As New SMTPSocket

nmm.Address = kSMTP
nmm.Port = 25
nmm.Username = kUser
nmm.Password = kPassword

Como puedes observar ni tan siquiera es preciso indicar que se conecte al servidor remoto. Podríamos hacerlo si queremos un mayor control, por ejemplo para constatar que está levantado en el otro extremos y que las credenciales son correctas antes de proceder con el envío; pero ciertamente podemos obviarlo.

Crear y componer el email

Con nuestro socket o conexión al servidor SMTP remoto ya configurada, es el momento de ocuparnos de la composición de nuestro mensaje de correo electrónico. En este caso, las propiedades que hemos de indicar son las correspondientes a los datos del remitente (nosotros), el o los destinatarios, el asunto del mensaje y, por supuesto, el cuerpo propiamente dicho del mensaje de correo electrónico que deseemos enviar. En este último caso, es significativo destacar que en la clase EmailMessage encontramos las variantes para asignar el cuerpo del mensaje como texto plano, como texto enriquecido o bien como HTML; de modo que podemos curbrir así todas las opciones en función de cual sea (o como tenga configurado) el cliente de correo electrónico el receptor o receptores de nuestros correos. Por ejemplo, si el cliente de correo electrónico del destinatario puede visualizar HTML, entonces será esta la versión que se mostrará del email, mientras que si no es así, se mostrará la versión de texto plano que hayamos proporcionado, por ejemplo.

Por tanto, podremos crear nuestro mensaje de correo electrónico de la siguiente forma:

Dim em As New EmailMessage

em.AddRecipient "destinatario@sudominio.com"
em.Subject = "Prueba de Correo"
em.BodyPlainText = "Esta es la versión del mensaje en texto plano"
em.BodyHTML = "<!DOCTYPE html><html><body><p>Este es un párrafo en HTML.</p><p>Este es el segundo de los párrafos.</p><p><b>Y este es el último</b>.</p></body></html >"
em.FromAddress = "Javier Rodriguez <javier@midominio.com>"

Como puedes observar, una vez creada la nueva instancia del mensaje de correo electrónico es una simple cuestión de asignar los valores correspondientes a cada una de las propiedades; mientras que el método AddRecipient es el responsable de añadir tantos destinatarios como deseemos. En este sentido, también podemos emplear los métodos AddCCRecipient (mediante el que se añade un destinatario en copia), o bien AddBCCRecipient (con el que cual añadimos destinatarios ocultos en el mensaje a enviar).

Adjuntar archivos

El tercer paso es opcional, aunque lo cierto es que probablemente necesitemos acompañar en muchos casos nuestros mensajes de correo electrónico con el envío de un adjunto. Dichos adjuntos son los que se han de añadir a la instancia de EmailMessage que estemos componiendo mediante el uso de la clase EmailAttachment. El proceso no puede ser más sencillo, todo lo que necesitamos es proporcionar a la instancia de EmailAttachment un objeto válido FolderItem correspondiente al archio que deseemos adjuntar para, posteriormente, cargarlo en la instancia de EmailAttachment mediante el uso del método LoadFile y, por último, añadir la instancia de EmailAttachment al mensaje de correo que estamos componiendo.

Por ejemplo, esto es lo que realizamos mediante el siguiente fragmento de código, utilizando para ello el cuadro de diálogo que nos permite seleccionar el archivo a adjuntar:

Dim ea As New EmailAttachment

Dim f As FolderItem = GetOpenFolderItem("")

ea.LoadFromFile f

em.Attachments.Append ea

Por supuesto, puedes adjuntar tantos archivos como consideres oportuno. Ten en cuenta que en este sentido la limitación en cuanto al tamaño máximo admitido viene establecidad por el propio proveedor; y si bien suele ser generosa no es lo más recomendable enviar una cantidad de archivos con un tamaño voluminoso (en megabytes) por correo electrónico. Si esta fuese la necesidad, entonces probablemente prefieras recurrir a otros medios.

Enviar el mensaje

Con nuestro mensaje de correo electrónico ya compuesto sólo queda añadirlo a la instancia creada en el primer paso responsable de conectar con el servidor SMTP. Tras añadir el mensaje, podríamos repetir el ciclo para crear y añadir tantos mensajes de correo electrónico como fuesen precisos a la cola de la conexión SMTP y, una vez finalizado, ya simplemente tendríamos que ejecutar el método SendEmail sobre la instancia de conexión SMTP para que esta abra la conexión con el servidor remoto, procese y envíe todos los mensajes disponibles en la cola, y cierre finalmente la conexión una vez que se hayan enviado todos los mensajes. ¡Así de sencillo! En nuestro ejemplo, esto es lo que logramos mediante las siguientes dos líneas de código:

nmm.Messages.Append em
nmm.SendMail

Conclusión

Como has visto, implementar en nuestras aplicaciones la capacidad de crear y enviar correo electrónico es realmente fácil. Ahora bien, si prefieres tener más control sobre los posibles errores que se pueden producir en el camino, por ejemplo a la hora de enviar un volumen realmente elevado de mensajes en cola, comprobar si la conexión con el servidor remoto persiste, o si se ha producido un error, entonces lo más recomendable es que crees tu propia subclase de SMTPSocket e implementes los correspondientes eventos disponibles para dichos supuestos.

2 comentarios en “Enviar email desde tus apps Xojo

  1. TANCO MAURICIO

    Hola Javier, como lo adapto a la web?
    Además cuando le adjunto el archivo, en la web cambio el GetOpenFolderItem por el
    SpecialFolder.Temporary.child (por ejemplo).

    Dim f As FolderItem = GetOpenFolderItem(“”)
    Dim f as folderitem = SpecialFolder.Temporary.child(“gServer.txt”)

    La idea en la app web es que luego de generar un archivo de texto lo mande por email, me puedes referencias a algún link?. gracias!

    1. Javier Rodriguez

      Hola Mauricio,

      Lo único que deberías cambiar son los datos correspondientes al servidor de email, usuario y contraseña… Por lo demás el funcionamiento es exactamente idéntico, de ahí la facilidad con la que puedes no sólo enviar email desde aplicaciones desktop o consola, sino también desde aplicaciones Web.

      Por supuesto, la adaptación de los adjuntos dependerá en todo caso de las rutas que desees utilizar como fuente de los archivos, tal y como indicas.

      Javier

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *