Enviar el mismo email a todos los registros de una consulta de access

Quiero enviar el mismo email a todos los registros de una consulta de Access en la que tengo el campo del email de cada uno de los socios de una asociación. Creo que a través de macro no es posible, que para mi sería lo ideal, pero supongo que con código si que se puede, ¿me podéis ayudar por favor?

Para mi lo ideal sería hacerlo a través de un formulario con 2 campos de texto, uno para escribir el asunto del email, el otro para escribir el mensaje que quiero hacer llegar a los socios filtrados por la consulta y un botón de comando que sirviera para, a través de un solo clic, enviar ese email a todos ellos.

3 respuestas

Respuesta
1

Puede hacer lo siguiente:

  1. Crear una consulta que contenga la lista de destinatarios para el correo electrónico.

  2. Crear una función que genere el correo electrónico y envíe el mensaje. La función debe tomar como argumento el destinatario del correo electrónico.

  3. Crear un bucle que recorra los registros de la consulta y llame a la función de envío de correo electrónico para cada registro.

CODIGO BOTÓN DE ENVÍO

Sub EnviarCorreos()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim destinatario As String
    Set db = CurrentDb
    Set rs = db.OpenRecordset("NombreDeLaConsulta")
    Do While Not rs.EOF
        destinatario = rs("CampoDeCorreoElectronico")
        EnviarCorreo destinatario, Me.asunto, Me.mensaje
        rs.MoveNext
    Loop
    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
End Sub

Código de la Función EnviarCorreo

Function EnviarCorreo(destinatario As String, strasunto As String, strmensaje As String)
    Dim objOutlook As Outlook.Application
    Dim objMail As Outlook.MailItem
    Set objOutlook = CreateObject("Outlook.Application")
    Set objMail = objOutlook.CreateItem(olMailItem)
    objMail.To = destinatario
    objMail.Subject = trasunto
    objMail.Body = strmensaje
    objMail.Send
    Set objMail = Nothing
    Set objOutlook = Nothing
End Function

¡Gracias! El código del botón tengo claro donde ponerlo, pero el de la función donde se pone?

Puede ir a nivel de formulario o en un modulo

¡Gracias! Supongo que me he expresado mal, el código del botón de envío, lo pongo como en las propiedades del botón en el "[Procedimiento de evento]"  "al hacer clic"; eso lo tengo claro.

Pero el código de la función enviar correo, en las propiedades de que elemento lo pongo y en que sitio de sus propiedades?

Y disculpa mi ignorancia, es que yo estoy bastante verde, con macros me defiendo, pero con código no, por eso lo necesito tan clarito.

Mil gracias

A ver para que no se complique cree un nuevo módulo

Haga clic en Crear del menú de la cinta de opciones

En el grupo Macros y código haga clic en Módulo

Copie el código de la función

¡Gracias! Ok, y ya la última, desde donde llamo a esa función del módulo....

Adicione un botón a su formulario, por ejemplo, supongamos que lo llama btnCorreo. Haga clic en el evento "Al hacer clic" y copie el código del ejemplo, es decir, el código que está entre Sub EnviarCorreos() y En Sub. Debe quedarle algo como:

Sub btnCorreo_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim destinatario As String
Set db = CurrentDb
Set rs = db.OpenRecordset("NombreDeLaConsulta")
Do While Not rs.EOF
destinatario = rs("CampoDeCorreoElectronico")
EnviarCorreo destinatario, Me.asunto, Me.mensaje
rs.MoveNext
Loop
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Sub

Este procedimiento llama la función que se encarga de enviar los correos, el la línea EnviarCorerdo destinatario, Me.asunto, Me.mensaje. 

Los campos asunto y mensaje deben existir en su formulario

Respuesta
1

Es sencillo, pero antes una pregunta. ¿Llevará algún archivo adjunto, o sólo es el mensaje y el asunto?

¡Gracias! Sin correo adjunto.

Lo puedes hacer de mil formas, pero tendrás que usar el Outlook en el escritorio. Luego te digo como hacerlo.

Si tengo una tabla( en tu caso una consulta) y con ella hago un formulario del tipo

Cuando pulso el botón Enviar, va recorriendo los registros hasta el final enviando los correos a la bandeja de salida de Outlook. Luego ya depende de como lo tengas configurado para que lo envíe inmediatamente o le digas tu cuando debe enviarlo.

En este caso en particular. Recalco lo de este caso porque se puede hacer de mil formas distintas, de verdad, mil formas. En el evento Al hacer clic del botón Enviar le tengo puesto

Private Sub Comando9_Click()
DoCmd.GoToRecord , , acFirst
Dim i As Integer
For i = 1 To Me.Recordset.RecordCount
Dim pola As Outlook.Application
    Dim pTaskItem, ptaskitemasig As Outlook.TaskItem
    Const olCreateTasks = 3
    Const olDialog = 1
    Const olSound = 8
    Set pola = CreateObject("Outlook.Application")
    sSubject = "" & Me.Asunto & ""
    sBody = "" & Me.Mensaje & ""
    dDue = Now()
    dStart = Now()
    sSoundFile = "alarm3"
    bReminderSet = True
    Set pTaskItem = pola.CreateItem(olCreateTasks)
        pTaskItem.Subject = sSubject
        pTaskItem.Body = sBody
        pTaskItem.DueDate = dDue
        pTaskItem.StartDate = dStart
        pTaskItem.ReminderSet = bReminderSet
        If bReminderSet Then
              pTaskItem.ReminderSoundFile = sSoundFile
              pTaskItem.ReminderTime = Now()
        End If
        pTaskItem.Recipients.Add ("'" & Me.EMailFam & "'")
        pTaskItem.Assign
        pTaskItem.Send
        Set pTaskItem = Nothing
    Set pola = Nothing
DoCmd.GoToRecord , , acNext
Next
End Sub

Para "poner" Outlook en el escritorio, crea un nuevo acceso directo y en la ventana de "Escriba una ubicación le pones

C:\Program Files (x86)\Microsoft Office\root\Office16\OUTLOOK.EXE

Respuesta
1

Como bien te han dicho, es relativamente sencillo y se puede hacer con macros (macros que llaman a macros), pero no es esa la cuestión.

Lo que quiero aportar es un consejo: en función de la cantidad de socios ( un socio = un correo), es conveniente plantearse el crear lotes para enviarlos y evitar que los servidores de correo lo marquen como Spam (no es lo mismo 20 que 200 o 2000 correos en un único envío masivo).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas