Access - Enviar e-mail a varias personas desde access a outlook (NO LO CONSIGO AYUDA POR FAVOR)

 
Vista:
sin imagen de perfil

Enviar e-mail a varias personas desde access a outlook (NO LO CONSIGO AYUDA POR FAVOR)

Publicado por Javier (71 intervenciones) el 31/03/2016 18:17:54
Hola programadores, escribo porque ya estoy desesperado, tengo una base de datos con varios formularios y uno de ellos es para enviar e-mail abriendo outlook como intermediario, para enviarlo a una persona lo hago bien, este es el código que SI me funciona para una persona:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub Comando16_Click()
Call sendmail
End Sub
Sub sendmail()
Dim oOutlook As Outlook.Application
Dim oEmailItem As MailItem
On Error Resume Next
Err.Clear
Set oOutlook = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then
Set oOutlook = New Outlook.Application
End If
 
Set oEmailItem = oOutlook.CreateItem(olMailItem)
With oEmailItem
.To = Me.CORREO_ELECTRÓNICO
.CC = ""
.Subject = "CORREO DE ACADEMIA"
For n = 0 To Me.Lista14.ListCount - 1
.Attachments.Add (Me.Lista14.ItemData(n))
Next n
 
.Display
End With
Set oEmailItem = Nothing
Set oOutlook = Nothing
End Sub

ESTE CÓDIGO FUNCIONA PERFECTAMENTE, ME ABRE EL OUTLOOK CON EL DESTINATARIO YA PUESTO Y LOS ARCHIVOS ADJUNTOS DEL FORMULARIO AGREGADOS

EL PROBLEMA VIENE CUANDO QUIERO ENVIARLO A TODOS LOS DESTINATARIOS DONDE USO EL SIGUIENTE CÓDIGO:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Private Sub Comando18_Click()
Dim oOutlook As Outlook.Application
Dim oEmailItem As MailItem
Dim rs As Recordset
Dim customerEmail As String
 
On Error Resume Next
Err.Clear
Set oOutlook = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then
Set oOutlook = New Outlook.Application
End If
 
Set oEmailItem = oOutlook.CreateItem(olMailItem)
With oEmailItem
    Set rs = CurrentDb.OpenRecordset("Select * from ALUMNOS")
    If rs.RecordCount > 0 Then
        rs.MoveFirst
        Do Until rs.EOF
            If IsNull(rs!CORREO_ELECTRÓNICO) Then
                rs.MoveNext
            Else
                customerEmail = customerEmail & rs!CORREO_ELECTRÓNICO & ";"
                .To = customerEmail
                rs.MoveNext
            End If
        Loop
    Else
        MsgBox " NADIE TIENE EMAIL"
    End If
    Set rs = Nothing
 
.CC = ""
.Subject = "PRUEBA"
For n = 0 To Me.Lista14.ListCount - 1
.Attachments.Add (Me.Lista14.ItemData(n))
Next n
 
.Display
End With
Set oEmailItem = Nothing
Set oOutlook = Nothing
End Sub

ESTE CÓDIGO ME ABRE EL OUTLOOK , ME AGREGA LOS ARCHIVOS ADJUNTOS, PERO NO ME AGREGA A NADIE COMO DESTINATARIO ALGUIEN SABE DONDE ESTÁ EL FALLO?

ESPERO QUE ME PODÁIS AYUDAR ESTOY DESESPERADO
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Enviar e-mail a varias personas desde access a outlook (NO LO CONSIGO AYUDA POR FAVOR)

Publicado por Enrique Heliodoro (1664 intervenciones) el 31/03/2016 22:32:38
Si, tan 'desesperado' que no has seguido las normas de usernet y (parodiando a 'D.Juan Tenorio' se podría decir aquello de 'Cuanto grita este maldito'.....

EN fin, supongo que lohas copiado de alguna parte y ..... si se tiene claro lo que se hace, el mismo código 'que funciona' seria útil para hacer un envío masivo (casi casi SPAM).

En el código se le envía 'lo que sea' a quien figure en el apartado '.To' que en principio toma solo el correo de un alumno .... pero separados por punto y coma pueden ir tantos correos como sea preciso (respetando el máximo que admita el gestor de correo), en principio yo evitaría enviar demasiados, porque puede ser tratado como SPAM y rechazado por muchos de los servidores ......

Según lo anterior ese seria el punto adecuado para insertar los correos-e con un simple bucle, pero haciéndolo bien, comenzando por abrirlo como de solo lectura, de el tomar SOLO el campo Correo-e (verificando que NO este vacio) y creando la cadena de texto:

En lugar de:
.....
.To = Me.CORREO_ELECTRÓNICO
.....

Esto otro:

......
Set Rs = CurrentDb.OpenRecordset ("Select [campo con el correo] From [Tabla alumnos] Where Not IsNull[[campo con el correo] ]",,DbReadOnly)
'verificamos que hay datos
If Rs.RecordCount = 0 Then Exit Sub ' si no hay direcciones se aborta el envío ....
'Comenzamos la carga de las direcciones
Do Until Rs.Eof
If .To <> "" Then .To = .To & "; "
.To = .To & Rs![campo con el correo]
Rs.MoveNext
Loop
..........


Y con un mínimo de ingenio (y un IF así como un botón o campo de verificación) se puede enviar un solo coreo o un correo masivo sin necesidad de crear dos opciones individuales ..... solo activando/desactivando el campo de control.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar