Lección 23: Enviar automáticamente emails con macros (Lotus).

Escrito por Administrador

24 de agosto de 2021

En esta lección vas a aprender cómo realizar envíos de correos electrónicos de manera automática a través de la aplicación Lotus.

He elegido esta plataforma por ser la de mayor uso corporativo, y la más compleja de programar. Aun así, si hay alguien interesado en usar otro tipo de programa como, por ejemplo, Outlook o similar, solo tiene que comentármelo y organizo una lección para ello.

Hoy también vas a aprender a usar funciones. De hecho, el programa de envío de emails lo he confeccionado como función. Pero no te asustes, una función es un programa estándar con una serie de parámetros que le tienes que especificar para poder ejecutarse.

Al definir una función, entre paréntesis, definimos que parámetros tendremos que darle a la hora de ejecutarla. Por ejemplo, la siguiente función necesita que le demos el asunto (subject) cuando la llamemos.

Sub SendEmail(Subject)

Dentro del código de la función se llamará a ese parámetro (subject) y si no se lo hemos pasado, nos dará error.

Por otro lado, para llamar a una función, solo tenemos que poner su nombre, rellenando los parámetros que necesita. Para el ejemplo anterior, llamaríamos a la función enviar email, que lo enviaría con el asunto “Control de gastos”.

SendEmail "Control de gastos"

Vamos a abordar el caso más complejo, enviar un email a varios destinatarios con adjuntos (para poder enviar emails de manera automática, debes tener abierta la sesión en Lotus).

Para ello, creamos un libro nuevo e insertamos un módulo. Copia el código completo. Los campos a personalizar por ti se encuentran coloreados en rojo.

Crea también un botón y asígnale la macro.

Macro 1

Sub email()

SendEmail "Control de gastos"

End Sub

Sub SendEmail(Subject)

Dim Maildb As Object

Dim mailDoc As Object

Dim body As Object

Dim session As Object

Dim Recipient As Variant

'Inicio de sesión en Lotus

Set session = CreateObject("Notes.NotesSession")

'Abre la base de datos de Lotus

Set Maildb = session.GetDatabase("", "names.nsf")

If Not Maildb.IsOpen = True Then

Call Maildb.Open

End If

'Crea un nuevo email

Set mailDoc = Maildb.CreateDocument

Call mailDoc.ReplaceItemValue("Form", "Memo")

'Elegimos los destinatarios

Recipient = Array("email1@direccion.com", "email2@direccion.com", "email3@direccion.com")

Call mailDoc.ReplaceItemValue("SendTo", Recipient)

'Insertamos el asunto elegido

Call mailDoc.ReplaceItemValue("Subject", Subject)

'Escribimos el contenido del email

Set body = mailDoc.CreateRichTextItem("Body")

Call body.AppendText("Buenos días,")

Call body.AddNewLine(2)

Call body.AppendText("Se adjunta archivo con control de gastos.")

Call body.AddNewLine(2)

Call body.AppendText("Saludos.")

'Insertamos un archivo adjunto

Call body.AddNewLine(2)

Call body.EmbedObject(1454, "", "C:\Users\usuario\Desktop\Control de gastos.xls")

Call body.AddNewLine(2)

Call body.EmbedObject(1454, "", "C:\Users\usuario\Desktop\Control de gastos.doc")

Call body.AddNewLine(2)

mailDoc.SaveMessageOnSend = True

Call mailDoc.ReplaceItemValue("PostedDate", Now())

Call mailDoc.send(False)

'Limpiamos

Set Maildb = Nothing

Set mailDoc = Nothing

Set body = Nothing

Set session = Nothing

End Sub

Antes de pulsar el botón, vamos a repasar el código y te voy a ir explicando qué hacemos en cada paso.

La primera parte del código es la macro, de nombre “email”. Solo contiene una línea, que es la llamada a la función “SendEmail”. Como ves, le pasamos el parámetro (subject) con el valor “Control de gastos”, que será el asunto del correo electrónico.

Sub email()

SendEmail "Control de gastos"

End Sub

La segunda parte del código es la función. Su nombre es SendEmail y entre paréntesis aparece el único parámetro que necesita para ejecutarse (Subject), que ya se lo hemos pasado al llamarla desde la macro.

Sub SendEmail(Subject)

A continuación, declaramos una serie de variables que vamos a usar posteriormente.

Dim Maildb As Object

Dim mailDoc As Object

Dim body As Object

Dim session As Object

Dim Recipient As Variant

Ahora iniciamos la sesión en Lotus con nuestro usuario.

'Inicio de sesión en Lotus

Set session = CreateObject("Notes.NotesSession")

Abrimos la base de datos de Lotus para poder trabajar.

'Abre la base de datos de Lotus

Set Maildb = session.GetDatabase("", "names.nsf")

If Not Maildb.IsOpen = True Then

Call Maildb.Open

End If

Creamos un nuevo email.

'Crea un nuevo email

Set mailDoc = Maildb.CreateDocument

Call mailDoc.ReplaceItemValue("Form", "Memo")

Para poder enviar un correo a varios destinatarios es necesario crear un array de direcciones, como si se tratara de una matriz.

'Elegimos los destinatarios

Recipient = Array("email1@direccion.com", "email2@direccion.com", "email3@direccion.com")

Call mailDoc.ReplaceItemValue("SendTo", Recipient)

Ahora insertamos en el asunto el texto que introdujimos en el parámetro cuando llamamos a la función “Control de gastos”.

'Insertamos el asunto elegido

Call mailDoc.ReplaceItemValue("Subject", Subject)

Podemos establecer el contenido del email con un texto estándar, tipo “Buenos días, se adjunta archivo con control de gastos.”

El comando Call body.AddNewLine(2) simplemente inserta un espacio para separar párrafos.

'Escribimos el contenido del email

Set body = mailDoc.CreateRichTextItem("Body")

Call body.AppendText("Buenos días,")

Call body.AddNewLine(2)

Call body.AppendText("Se adjunta archivo con control de gastos.")

Call body.AddNewLine(2)

Call body.AppendText("Saludos.")

Para insertar archivos adjuntos, tan solo tenemos que saber la ruta de los mismos.

'Insertamos un archivo adjunto

Call body.AddNewLine(2)

Call body.EmbedObject(1454, "", "C:\Users\usuario\Desktop\Control de gastos.xls")

Call body.AddNewLine(2)

Call body.EmbedObject(1454, "", "C:\Users\usuario\Desktop\Control de gastos.doc")

Call body.AddNewLine(2)

Elegimos que se guarde en enviados.

mailDoc.SaveMessageOnSend = True

Call mailDoc.ReplaceItemValue("PostedDate", Now())

Call mailDoc.send(False)

Limpiamos y salimos.

Set Maildb = Nothing

Set mailDoc = Nothing

Set body = Nothing

Set session = Nothing

End Sub

Con esto llegamos al final de la vigesimotercera lección. Espero que te esté gustando el curso y que me plantees cualquier duda que te surja. También puedes proponerme macros que te interese desarrollar y las voy incluyendo en el temario, soy todo oídos. Nos vemos en el próximo capítulo.

Descarga el archivo del ejemplo

« L22. Evento Change e Intersect en macros.

EP1. Cómo importar datos de otra hoja con macros. »

0 comentarios

Enviar un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Quizá te interese,

Contacto