Cómo personalizar mensaje con el nombre del destinatario en correo electrónico masivo?

Necesito de la valiosa ayuda que siempre me brindan para poder indicar el nombre del destinatario en el cuerpo del mensaje, durante un envío masivo usando Access y Outlook.

Estoy utilizando un ejemplo que me encontré de neckkito y que otro experto me ayudo en su momento adaptar a lo que necesitaba, pero en esta ocasión me han solicitado que le agregue a los correos el nombre de cada destinatario.

He buscado ejemplos para darme ideas, pero los que he visto son con macros y no me sirven.

Nombre de la tabla: TDatos

Nombre de la consulta donde filtro los destinatarios: CComercial

Nombre del campo que deseo que se muestre en el mensaje: NomContacto

El botón de envío de correos electrónicos masivo es el siguiente:

Private Sub cmdEnvioMasivo_Click()

On Error GoTo sol_err

'Definimos las variables

Dim mailA As String

Dim mailCC As String

Dim mailCCO As String

Dim elAsunto As String, elMsg As String

'Pedimos al usuario que especifique el asunto

elAsunto = "Notificación de Resultados"

'Si no se especifica nada los valores se convierten a cadena de texto vacía

If IsNull(elAsunto) Then elAsunto = ""

If IsNull(elMsg) Then elMsg = ""

'Exportamos el informe en formato snapshot a la carpeta donde tenemos la BD

Dim ruta As String, miInforme As String

ruta = Application.CurrentProject.Path & "\"

miInforme = ruta & "Informe.pdf"

DoCmd.OutputTo acOutputReport, "RDatos", acFormatPDF, miInforme, False

'Creamos el recordset

Dim rst As Recordset

Set rst = CurrentDb.OpenRecordset("CComercial")

'Nos movemos al primer registro

rst.MoveFirst

'Iniciamos el proceso

Do Until rst.EOF

'Creamos una instancia de Outlook

Dim Olk As Outlook.Application

Set Olk = CreateObject("Outlook.Application")

'Creamos un nuevo mensaje de Outlook

Dim OlkMsg As Outlook.MailItem

Set OlkMsg = Olk.CreateItem(olMailItem)

'Creamos la información del mail

With OlkMsg

'Definimos los elementos del mail

Dim OlkDestinatario As Outlook.Recipient

Dim OlkAdjunto As Outlook.Attachment

'Inicializamos los elementos del mail

Set OlkDestinatario = .Recipients.Add(rst.Fields("MailCont").Value)

OlkDestinatario.Type = olTo

'Comprobamos que exista el archivo que vamos a adjuntar

If Not IsMissing(miInforme) Then

Set OlkAdjunto = .Attachments.Add(miInforme)

End If

'Añadimos los elementos Asunto y Mensaje

.Subject = elAsunto

If rst("reporte") = True And rst("CD") = True Then

.Body = "Hemos recibido sus resultados"

ElseIf rst("reporte") = True And rst("CD") = False Then

.Body = "Hemos recibido el reporte"

ElseIf rst("reporte") = False And rst("CD") = True Then

.Body = "Hemos recibido el CD"

'Else

'.Body = " No hemos recibido nada"

End If

'Enviamos el mail

.Send

End With

'Nos movemos al siguiente registro

rst.MoveNext

Loop

'Lanzamos un mensaje de OK

MsgBox "El mensaje masivo se ha enviado correctamente", vbInformation, "CORRECTO"

'Eliminamos el archivo Informe.snp de la carpeta

Kill miInforme

'Cerramos conexiones y liberamos memoria

rst.Close

Set rst = Nothing

'Eliminamos la instancia

Set Olk = Nothing

Set OlkMsg = Nothing

Set OlkDestinatario = Nothing

Set OlkAdjunto = Nothing

Salida:

Exit Sub

sol_err:

MsgBox Err.Number & ": " & Err.Description

Resume Salida

End Sub

1 respuesta

Respuesta
2

Pues depende de dónde quieras poner el nombre, pero la idea sería la misma siempre...

Por ejemplo, si quieres que en el mensaje aparezca "hemos recibido ..., Sr X", tendrías que cambiar las lineas del .Body para añadir el nombre:

.Body = "Hemos recibido sus resultados, Sr. " & rst("NomContacto")

Si lo quisieras en el asunto, modificarías el valor de "elAsunto", pero dentro del bucle que recorre el recordset:

El Asunto=elAsunto & ", Sr " & rst("NomContacto")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas