Foros del Web » Programando para Internet » ASP Clásico »

Listas de Correo en ASP y ACCESS

Estas en el tema de Listas de Correo en ASP y ACCESS en el foro de ASP Clásico en Foros del Web. Hola a todos, He creado una BD Access 2003 con la finalidad de enviar confirmaciones de que hay un nuevo registro en un boletin de ...
  #1 (permalink)  
Antiguo 24/06/2008, 04:19
 
Fecha de Ingreso: diciembre-2004
Mensajes: 15
Antigüedad: 20 años, 4 meses
Puntos: 0
Pregunta Listas de Correo en ASP y ACCESS

Hola a todos,

He creado una BD Access 2003 con la finalidad de enviar confirmaciones de que hay un nuevo registro en un boletin de noticias, esta base de datos contiene 2 campos:

un campo llamdo idEmail (autonumerico) y otro Email (texto, 50 caracteres)

Utilizo el componente de correo ASPEmail (Persits.MailSender) como gestor de correo (ya que és el único que proporciona mi proveedor de alojamiento - he probado los otros componentes CDO, CDONTS, CDOSYS y no funcionan - y cuando intento enviar los mensajes de correo se envian los mensajes a un unico registro, pero no al resto de los registros.
La funcion que utilizo para enviar correo es correcta y no me da problemas, a continuación detallo el código:

Dim objMail
Set objMail = Server.CreateObject("Persits.MailSender")
objMail.FromName= "Aquí pongo el Remitente"
objMail.host= Aquí pongo el Host
objMail.Port= Aquí pongo el puerto
objMail.Username = Aquí pongo el nombre de usuario de la cuenta de correo
objMail.Password = Aquí pongo el password
'objMail.addAddress LISTA_CORREO (Tengo esta opción desactivada)
objMail.AddBcc LISTA_CORREO (Aquí está el problema)
objMail.Subject = Aquí pongo el asunto
objMail.Body = Aquí pongo el cuerpo del mensajel
objMail.Send
If Err <> 0 Then
Response.Write "Ha ocurrido un error: " & Err.Description
End If
Set objMail = Nothing

Bien, la variable LISTA_CORREO la saco de de un include al fichero que hace la conexión a la BD con el contenido de los registros con las direcciones email.

Este es el codigo de la conexión a la BD y donde genero la consulta:


<!--#include file="../alertas/DBConnect.inc" -->'Aquí tengo la conexión a la BD

Dim con, rs2, strSql
'Conecto a la BD
Set con = GetDBConnection()
'Genero consulta y obtengo direcciones email de la BD
strSql = "SELECT Email FROM Suscriptores" (Nombre del campo y la tabla de la BD)
Set rs2 = Server.CreateObject("ADODB.Recordset")
rs2.Open strSql, con, 1, 2

<%
If Not rs2.EOF Then
Do While Not rs2.EOF
Dim LISTA_CORREO
LISTA_CORREO = rs2("Email")
rs2.MoveNext
Loop
End If
rs2.Close
Set rs2 = Nothing
con.Close()
Set con = Nothing

%>


Y así de esta forma solo consigo enviar a un unico registro, cuando la BD tiene más de uno.

No sé como salir de a quí. Agradecería vuestra ayuda.
  #2 (permalink)  
Antiguo 24/06/2008, 05:29
 
Fecha de Ingreso: junio-2008
Ubicación: Valladolid
Mensajes: 38
Antigüedad: 16 años, 10 meses
Puntos: 3
Respuesta: Listas de Correo en ASP y ACCESS

Hola leoninono2:

Según está el bucle, el valor de LISTA_CORREO se pisa con el valor del siguiente correo en cada vuelta, con lo que al final, tendrá el valor del último registro de la tabla.

Por otra parte, AddAdress, AddBcc, etc. tienen dos argumentos como máximo: email y nombre -que es opcional. Si quieres enviar el correo a varios, tendrás que invocar a AddAdress, AddCc, etc. tantas veces como destinatarios tenga el mail:

AddAdress "[email protected]", "pepe"
AddAdress "[email protected]", "pepe2"
...

Pero como estás haciendo una lista de correo, no interesa que los destinatarios vean en el mail toda la lista de correos (por la L.O.P.D.), sino que solo debe aparecer el correo del destinatario, por lo que la mejor manera de hacerlo es con un procedimiento para el envío del correo, que se invocará en cada vuelta del bucle que recupera todas las direcciones de correo de la tabla. Es decir:
...
do while not rs2.EOF
call sendMail("pepe pérez", "[email protected]", "nombreDestino", rs2(0), "asunto", "body")
rs2.moveNext
loop
...

sub sendMail(nombreDe, mailDe, nombrePara, mailPara, asunto, body)
Set objMail = Server.CreateObject("Persits.MailSender")
objMail.FromName= "Aquí pongo el Remitente"
objMail.host= Aquí pongo el Host
objMail.Port= Aquí pongo el puerto
objMail.Username = Aquí pongo el nombre de usuario de la cuenta de correo
objMail.Password = Aquí pongo el password
objMail.addAddress mailPara, nombrePara
objMail.Subject = asunto
objMail.Body = body
objMail.Send
If Err <> 0 Then
Response.Write "Ha ocurrido un error: " & Err.Description
End If
Set objMail = Nothing
end sub

Si hay muchos correos en la tabla, mejor que mail.send, usa mail.sendToQueue ó mail.queue (dependiendo de la versión de ASPEmail que use tu hosting) ya que asi el servidor mandará los envíos a una cola en vez de quedar a la espera de mandar todos los mails, lo cual hará que nada más dar al botón de envío, el servidor te de respuesta y no se quede colgado hasta acabar con todos los envíos.

Y una nota sobre el diseño de la tabla de correos: yo no usaría un campo autonumérico y otro con el mail, sino que usaría solo el mail como clave principal. De este modo, te aseguras de que cada mail aparece solo una vez y por tanto, se envía un solo correo a cada destinatario (evitando así inconsistencias) y si quieres, añade un campo de nombre para que al enviar el correo al destinatario le llegue con su nombre y no parezca SPAM.

Espero haberme explicado bien.
Saludos!!
  #3 (permalink)  
Antiguo 24/06/2008, 12:01
 
Fecha de Ingreso: diciembre-2004
Mensajes: 15
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Listas de Correo en ASP y ACCESS

Hola JoseLAKALePet:

Antes de nada, gracias por responder, y sí, te has explicado muy bien.

Tienes razón en lo del bucle, no sabía bien como parar al llegar al final de los registros.

Además ahora me he dado cuenta de los valores de AddAddress y AddBcc, solo admiten dos argumentos, con lo que aunque almacenase un juego de registros en una variable no la podia usar como una lista de destinatarios. (Creo que he visto algo de luz...)

Tienes razón en tu sugerencia de no incluir un campo autonúmerico en la tabla (no había pensando en los posibles valores repetidos), y también está muy bien incluir un campo Nombre para así poder personalizar mejor los mensajes, así que sigo tus sugerencias.

Voy a probar con el código que me has enviado y te cuento.

Muchas gracias.
  #4 (permalink)  
Antiguo 26/06/2008, 18:13
 
Fecha de Ingreso: diciembre-2004
Mensajes: 15
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Listas de Correo en ASP y ACCESS

Hola JoseLAKALePet,

Me ha servido de ayuda las explicaciones y las sugerencias que me proponías. He probado el código y ahhhh, excelente funciona bien, pero le hecho una pequeña variación y es que el

rs2.moveNext
loop

lo he tenido que poner después de:

objMail.Send

para que funcionara mejor, ya que curiosamente y no se porque me enviaba a cada dirección de correo dada de alta en la bd, tantas copias como direcciones tenía dadas de alta, como estoy en pruebas, habia creado 4 direcciones y a cada una me enviaba 4 copias. He intentado averiguar el pq pero ha sido imposible, se me ocurrió poner el bucle al final de cada envio, como te he explicado y ahora funciona correctamente un mensaje por cuenta de correo.

Como nota curiosa, hay una cuenta de correo a la que me sigue enviando 4 copias y no es el último registro de la bd.
Eliminé ese registro y volví a probar y funcionó bien un mensaje para cada una de las cuentas de correo.

Imagina que problemón si alguien recibe un mensaje con tantas copias como tenga la bd de registros.

Seguiré probando y depurando hasta que crea que funciona correctament.

Muchas gracias, por tu ayuda.

Saludos,
  #5 (permalink)  
Antiguo 30/08/2008, 06:30
Avatar de Cameron_2006  
Fecha de Ingreso: diciembre-2006
Mensajes: 248
Antigüedad: 18 años, 4 meses
Puntos: 0
Sonrisa Respuesta: Listas de Correo en ASP y ACCESS

Hola, no se si aún continuan con el tema, pero ya que se trata de Listas de correos, les comento que a mi me está funcionando "bien", pero haciendo pruebas con 50 correos funciona bien, si mando 400 ya no, que podría estar pasando, alguien ha tenido alguna vez esa incidencia?
  #6 (permalink)  
Antiguo 30/08/2008, 08:24
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 21 años, 6 meses
Puntos: 27
Respuesta: Listas de Correo en ASP y ACCESS

algunos servidores tienen configurados máximos de cuentas en el remitente
o maximos diario de cantidad de correos enviado por una cuenta

verifica la configuración de el server
__________________
JuanRa Pérez
San Salvador, El Salvador
  #7 (permalink)  
Antiguo 31/08/2008, 02:51
Avatar de Cameron_2006  
Fecha de Ingreso: diciembre-2006
Mensajes: 248
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Listas de Correo en ASP y ACCESS

Hablé ya con la empresa que me alquila el servidor, y efectivamente, el técnico no me supo decir cuantos puedo enviar (?) pero me dijo que había un límite.
Gracias
  #8 (permalink)  
Antiguo 04/11/2008, 17:27
 
Fecha de Ingreso: noviembre-2008
Mensajes: 22
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Listas de Correo en ASP y ACCESS

Hola! Yo también tengo un problema parecido al que se presentó al inicio. El caso es que tengo una base de datos en acces, en la que están registrados los usuarios con su correo electrónico, intené programar en ASP que mandara un correo de prueba a los usuarios registrados hasta ese momento que son 4 y que los por medio de response.write, me mostrara los correos a los cuales se había mandado el mensaje de prueba. Cuando ejecuto la página, se pueden ver los 4 correos registrados, pero el mensaje de prueba, solamente le llega al último de la lista, espero por favor que me puedan ayudar con este problema, pongo el código a su disposición para que me puedan orientar haber si tiene algún error. De antemano muchas gracias...

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("PyR.mdb")

set rs=createobject("ADODB.Recordset")
rs.CursorType = adOpenKeyset


%>
<!--
METADATA
TYPE="typelib"
UUID="CD000000-8B95-11D1-82DB-00C04FB1625D"
NAME="CDO for Windows 2000 Library"
-->
<%
'------------------------------------------------------------------------
'------------------------------------------------------------------------
Set cdoConfig = CreateObject("CDO.Configuration")

With cdoConfig.Fields
.Item(cdoSendUsingMethod) = cdoSendUsingPort
.Item(cdoSMTPServer) = "Servidor"
.Update
End With

body = "Este es un correo de prueba para verificar la capacidad de envíar correos a varios destinatarios, por favor mandenme un correo de confirmación si recibieron este correo. Gracias."



Set cdoMessage = CreateObject("CDO.Message")

With cdoMessage
Set .Configuration = cdoConfig
.From = "remitente@compañia.com.mx"
.Subject = "Correo de Prueba"
.htmlBody= body
RS.Open "usuarios", Conn, 1
while not rs.EOF
RESPONSE.Write(rs.fields("email"))
.bcc = rs.Fields("email")
rs.MoveNext
wend
.Send

RS.Close
Conn.Close

End With

Set cdoMessage = Nothing
Set cdoConfig = Nothing
%>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:46.