Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema con Asp Email

Estas en el tema de Problema con Asp Email en el foro de .NET en Foros del Web. Hola amigos... Estoy desarrollando una aplicación web en asp.net para el envio de emails, el problema esta en que el contenido es dinamico y proviene ...
  #1 (permalink)  
Antiguo 13/05/2004, 22:50
Avatar de MsTech.DotNet  
Fecha de Ingreso: marzo-2003
Ubicación: Maracay - Edo. Aragua
Mensajes: 605
Antigüedad: 21 años, 1 mes
Puntos: 0
Problema con Asp Email

Hola amigos...

Estoy desarrollando una aplicación web en asp.net para el envio de emails, el problema esta en que el contenido es dinamico y proviene de una base de datos.

Cuando traigo 1 registro en especifico, que provenga por un where idcampo = x si funciona pero el problema surge cuando quiero que me traiga varios registros y los mande por correo.

Como ya sabemos hay un parametro que es el body del email el cual lo lleno con una variable que es donde esta el html a enviar por el email y ese html contiene elementos dinamicos que provienen de la base de datos, pero necesito que el repita ese html con cada registro para enviarlo por mail.

En si la aplicacion es un newsletter que lo que hace es enviar los ultimos 10 articulos de la base de datos pero cada articulo debe estar metido en una tabla diferente y todos ser enviados juntos en 1 solo email..

Alguien tiene idea donde puedo conseguir informacion sobre esto o como puedo solucionar este problema???

Gracias...
__________________
Ing. Javier Ugalde
Desarrollador de Aplicaciones Web / Windows
Director de Desarrollos Web
Ing. en Información
Email: [email protected]
Telf. Hab: +[58] - (243) - 232.02.06
Telf. Cel: +[58] - (414) - 455.26.80
  #2 (permalink)  
Antiguo 14/05/2004, 01:14
 
Fecha de Ingreso: abril-2004
Mensajes: 48
Antigüedad: 20 años
Puntos: 0
Digo yo que con un bucle de 10 o hasta donde tú quieras y que empiece justo antes de la instrucción de la tabla y acabe al cerrarla, ya lo tendrías solucionado.

Yo normalmente uso una variable a la que le voy concatenando trozos, así puedo dividir el código en porciones. En este caso yo haría algo así:

i=0
where i<10
texto="<table><tr><td>"
texto=texto & "Aquí pones lo que tu quieras"
texto=texto & "</td></tr></table>
i=i+1
wend

Mail.Body=texto


Algo parecido a esto aunque no sea usando este bucle.
  #3 (permalink)  
Antiguo 14/05/2004, 09:19
Avatar de MsTech.DotNet  
Fecha de Ingreso: marzo-2003
Ubicación: Maracay - Edo. Aragua
Mensajes: 605
Antigüedad: 21 años, 1 mes
Puntos: 0
Hola Benjact como estas? si bueno de por si ya lo habia intentado claro no con esa estructura bucle que pusiste porque creo que asp.net no lo usa si no que usa:
dim i as integer
i=0
do while i<10
variables....
Loop

Pero el problema no es ese, el problema es que me repite siempre el mismo registro y lo que quiero es que haga el bucle pero avanzando los registros de la bd...

Alguna idea???

Gracias....
__________________
Ing. Javier Ugalde
Desarrollador de Aplicaciones Web / Windows
Director de Desarrollos Web
Ing. en Información
Email: [email protected]
Telf. Hab: +[58] - (243) - 232.02.06
Telf. Cel: +[58] - (414) - 455.26.80
  #4 (permalink)  
Antiguo 14/05/2004, 09:38
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0
¿Pero como accedes a la BD, con un datareader? con una datatable?
  #5 (permalink)  
Antiguo 14/05/2004, 09:44
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Puedes hacerlo con un datareader o un while...

Ejemplo..:

Cita:
Dim _mm As New System.Web.Mail.MailMessage
Do While dr.Read
_mm.To = CStr(dr("Email"))
_mm.From = "[email protected]"
_mm.Subject = "Algun título"
_mm.BodyFormat = Mail.MailFormat.Html 'opcional
_mm.Body = "Mensaje"
System.Web.Mail.SmtpMail.SmtpServer = "tu_smtp"
Try
System.Web.Mail.SmtpMail.Send(_mm)
Catch ex As Exception
End Try
Loop
Con ello irás recorriendo los registros que traes de tu query..y enviarás el mail a cada uno de tus usuarios.



Espero que te sirva éste ejemplo:

Saludos
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #6 (permalink)  
Antiguo 14/05/2004, 09:45
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
con un datareader o un while...
Mas bien es un datareader y un while
  #7 (permalink)  
Antiguo 14/05/2004, 10:47
Avatar de MsTech.DotNet  
Fecha de Ingreso: marzo-2003
Ubicación: Maracay - Edo. Aragua
Mensajes: 605
Antigüedad: 21 años, 1 mes
Puntos: 0
Gracias Rootk... ok hastan ahora todo eso va bien, pero el problema no es traerme los emails sino que el contenido del body es dinamico, si me traigo 1 solo registro si lo hace pero necesito traerme varios y que lo meta en el body, es decir, yo hago una consulta sql donde me traigo todos los articulos desde una fecha "x" hasta la fecha actual, y esos registros deben ir acomodados en una tabla html cada uno, y esas tablas que contiene a los articulos deben ir en el body del mensaje.. como puedo hacer eso??...

En si yo lo q mando en el newsletter son los resumenes de todos los articulos encontrados desde la fecha "x" hasta la fecha actual

Espero que me entiendan...

Gracias...


Javier
__________________
Ing. Javier Ugalde
Desarrollador de Aplicaciones Web / Windows
Director de Desarrollos Web
Ing. en Información
Email: [email protected]
Telf. Hab: +[58] - (243) - 232.02.06
Telf. Cel: +[58] - (414) - 455.26.80
  #8 (permalink)  
Antiguo 14/05/2004, 10:55
Avatar de MsTech.DotNet  
Fecha de Ingreso: marzo-2003
Ubicación: Maracay - Edo. Aragua
Mensajes: 605
Antigüedad: 21 años, 1 mes
Puntos: 0
ahh y se me olvidaba... todos los resumenes de los articulos que encuentre entre 2 fechas son enviados en 1 solo email a toda la lista de los correos que estan agregados al newsletter...
__________________
Ing. Javier Ugalde
Desarrollador de Aplicaciones Web / Windows
Director de Desarrollos Web
Ing. en Información
Email: [email protected]
Telf. Hab: +[58] - (243) - 232.02.06
Telf. Cel: +[58] - (414) - 455.26.80
  #9 (permalink)  
Antiguo 14/05/2004, 11:03
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0
Pues es que no veo el problema...

Vamos a ver:
Tu tienes un string -Mensaje- que es el contenido html de la pagina. Inicialmente, pones algo como:

mensaje = "<table> <tr>"

haces la consulta a la bd y con un datareader vas leyendo:

do while dr.read()
mensaje &= "<td>" & dr("TITULAR") & "</td></tr>"
mensaje &= "<td>" & dr("NOTICIA") & "</td></tr>"
loop

mensaje &= "</table>"

de las etiquetas html que he puesto no hagas mucho caso pero seria algo asi

Despues, te traes un datareader con las direcciones de los usuarios

Dim _mm As New System.Web.Mail.MailMessage
Do While dr.Read
_mm.To = CStr(dr("Email"))
_mm.From = "[email protected]"
_mm.Subject = "Algun título"
_mm.BodyFormat = Mail.MailFormat.Html 'opcional
_mm.Body = "Mensaje"
System.Web.Mail.SmtpMail.SmtpServer = "tu_smtp"
Try
System.Web.Mail.SmtpMail.Send(_mm)
Catch ex As Exception
End Try
Loop


Lo ves claro ya?

Salu2
  #10 (permalink)  
Antiguo 14/05/2004, 11:14
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0
Lo mejoramos un poco, y tomamos en cuenta el caso de que no haya noticias:

mensaje = "<table> <tr>"

if dr.Read() then

mensaje &= "<td>" & dr("TITULAR") & "</td></tr>"
mensaje &= "<td>" & dr("NOTICIA") & "</td></tr>"

do while dr.read()
mensaje &= "<td>" & dr("TITULAR") & "</td></tr>"
mensaje &= "<td>" & dr("NOTICIA") & "</td></tr>"
loop

else

hayNoticias = false
mensaje &= "</tr>"

end if


mensaje &= "</table>"

if hayNoticias then

Dim _mm As New System.Web.Mail.MailMessage
Do While dr.Read
_mm.To = CStr(dr("Email"))
_mm.From = "[email protected]"
_mm.Subject = "Algun título"
_mm.BodyFormat = Mail.MailFormat.Html 'opcional
_mm.Body = "Mensaje"
System.Web.Mail.SmtpMail.SmtpServer = "tu_smtp"
Try
System.Web.Mail.SmtpMail.Send(_mm)
Catch ex As Exception
End Try
Loop

end if


Salu2
  #11 (permalink)  
Antiguo 14/05/2004, 11:44
Avatar de MsTech.DotNet  
Fecha de Ingreso: marzo-2003
Ubicación: Maracay - Edo. Aragua
Mensajes: 605
Antigüedad: 21 años, 1 mes
Puntos: 0
Hola Lucxx, gracias por tu ayuda lo voy a probar y te aviso que tal me fue...

Gracias...

Javier
__________________
Ing. Javier Ugalde
Desarrollador de Aplicaciones Web / Windows
Director de Desarrollos Web
Ing. en Información
Email: [email protected]
Telf. Hab: +[58] - (243) - 232.02.06
Telf. Cel: +[58] - (414) - 455.26.80
  #12 (permalink)  
Antiguo 14/05/2004, 13:51
Avatar de MsTech.DotNet  
Fecha de Ingreso: marzo-2003
Ubicación: Maracay - Edo. Aragua
Mensajes: 605
Antigüedad: 21 años, 1 mes
Puntos: 0
Hola Lucxx, mira si con el reader si me funcionó al pelo, gracias... ahora tengo 2 problemitas mas...

1. Necesito hacer esta consulta:

dim fechainicio as string = desde.text
dim fechafin as string = hasta.text

La consulta SQL es: Select * from articulos where fechapub < "& fechafin &" and fechapub > "& fechainicio &" "

Pero al ejecutarla no me manda ningun articulo, ahora si quito la clausula where logicamente si me los manda todos, pero necesito que los mande (los articulos) desde 1 fecha "x" hasta la fecha actual. el campo fechapub de la base de datos es de tipo date/time

2. Yo me traigo todos los correos inscritos en el newsletter y los meto en un listbox y luego con unos botones elijo a cuales se los quiero enviar y los paso a otro listbox, entonces necesito que me envie el newsletter a todos los correos que estan dentro de un listbox, para ello hice lo siguiente....

dim bcc as string
dim i as integer
for i=0 to emailsxenviar.Items.Count-1
bcc = bcc & emailsxenviar.Items(i).Value
bcc = bcc & " ; "
Next
MiMail.Bcc = bcc

No se si esto funciona pero necesito que me saque los emails de un listbox y los separe por punto y coma y los meta en el parametro mimail.bcc para enviar el newsletter a cada email del listbox..

Gracias de Nuevo..

Saludos...

Javier
__________________
Ing. Javier Ugalde
Desarrollador de Aplicaciones Web / Windows
Director de Desarrollos Web
Ing. en Información
Email: [email protected]
Telf. Hab: +[58] - (243) - 232.02.06
Telf. Cel: +[58] - (414) - 455.26.80
  #13 (permalink)  
Antiguo 15/05/2004, 09:34
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola

en cuanto a lo primero:

dim fechainicio as string = desde.text
dim fechafin as string = hasta.text

yo declararia fechainicio y fechafin como DateTime, y cargaría sus valores a partir del texto de los textbox, ahora no tengo la documentación delante, asi que no se cual es la manera de crear un datetime a partir de un string, pero basta con irse a la documentación y buscar "datetime members"


y en cuanto a lo segundo, yo en lugar de meter las direcciones en un string separados por ";" las introduciría en un ArrayList, así no hay que ir parseando la cadena, sino simplemente ir recorriendo el arraylist dentro de un bucle

Espero que te sirva, salu2
  #14 (permalink)  
Antiguo 15/05/2004, 16:31
Avatar de MsTech.DotNet  
Fecha de Ingreso: marzo-2003
Ubicación: Maracay - Edo. Aragua
Mensajes: 605
Antigüedad: 21 años, 1 mes
Puntos: 0
Hola amigos...

En cuanto a como sacar los correos del Listbox y separarlos por coma ya lo logre resolver, no use arrays, pero logre programarlo de una forma mas sencilla, basicamente como lo estaba haciendo en un principio...

Aqui la solucion por si alguien la necesita...

dim email as listitem
For Each email In emailsxenviar.Items
correos = correos & email.value
correos = correos & " ; "
Next

Y luego meter la variable en el parametro "to"

enviocorreo.to = correos

En cuanto a lo de seleccionar todos los articulos segun un rango de fecha es decir, entre 2 fechas lo estaba haciendo asi...

Select * from articulos where fechapub between " & fechainicio & " and " & fechafin & "

Lo probe con diferentes formas que si con comillas simples comilla doble, solo con comillas dobles, intente asi:

Select * from articulos where fechapub between #" & fechainicio & "# and #" & fechafin & "#

Pero nada, solo esta ultima forma me trae los articulos pero no dentro del rango de las fechas que le pido...

Alguien tiene alguna sugerencia...

Aqui esta como tengo las variables definidas...

dim fechainicio as date = desde.text
dim fechafin as date = hasta.text

Lo probe asi y con las variables de tipo string.. pero no da resultado alguno... el campo en la base de datos es date/time con el formato dd/mm/yyyy y los parametros de entrada en la consulta sql tambien tienen el mismo formato dd/mm/yyyy, he estado leyendo y creo que es access que tiene un bug con eso de las fechas que no sabe diferenciar los formatos... es lo malo de access pero como asi me lo pidio mi cliente no tuve mas opcion...

Bueno espero que alguien tenga alguna sugerencia de como resolver este problema con lo de las fechas...

Gracias de antemano.....

Saludos...

Javier
__________________
Ing. Javier Ugalde
Desarrollador de Aplicaciones Web / Windows
Director de Desarrollos Web
Ing. en Información
Email: [email protected]
Telf. Hab: +[58] - (243) - 232.02.06
Telf. Cel: +[58] - (414) - 455.26.80

Última edición por MsTech.DotNet; 15/05/2004 a las 16:33
  #15 (permalink)  
Antiguo 16/05/2004, 08:34
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola

utiliza esto:

dim fechainicio as DateTime = new DateTime(anioIni, mesIni, diaIni)
dim fechafin as DateTime = new DateTime(anioFin, mesFin, diaFin)

Bien, los valores correspondientes al año, mes, etc, se pueden obtener separando el texto de los textbox, aunque yo utilizaria dropDownList's para cada componente de la fecha, pero en fin, eso es cuestión de gustos...

Así debería funcionar

Salu2
  #16 (permalink)  
Antiguo 16/05/2004, 08:39
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0
vuelvo...
P.D.: aunque el orden en los datetime que tienes que crear sea año - mes - dia, y el orden en que los muestra tu base de datos sea dia - mes - año, no cambies nada, funciona igual, en realidad eso son formas de representación y ambos sistemas interpretan las fechas internamente como un long

Salu2
  #17 (permalink)  
Antiguo 16/05/2004, 11:17
Avatar de MsTech.DotNet  
Fecha de Ingreso: marzo-2003
Ubicación: Maracay - Edo. Aragua
Mensajes: 605
Antigüedad: 21 años, 1 mes
Puntos: 0
Epale Lucxx que mas Bro!, dejame probar ese codigo a ver que tal me resulta... ya te aviso si me funcionó!!!

Saludos...

Javier
__________________
Ing. Javier Ugalde
Desarrollador de Aplicaciones Web / Windows
Director de Desarrollos Web
Ing. en Información
Email: [email protected]
Telf. Hab: +[58] - (243) - 232.02.06
Telf. Cel: +[58] - (414) - 455.26.80
  #18 (permalink)  
Antiguo 16/05/2004, 11:23
Avatar de MsTech.DotNet  
Fecha de Ingreso: marzo-2003
Ubicación: Maracay - Edo. Aragua
Mensajes: 605
Antigüedad: 21 años, 1 mes
Puntos: 0
Ah pero mira bro! se me olvidaba...

El problema es como separo la fecha del textbox porque lo que pasa es que son dos textbox... uno fecha inicio y uno fecha fin.. los dos estan readonly = "true" puesto que solo es para visualizar que el boletin será enviado entre esas dos fechas, la fecha inicio se la trae de la base de datos y no es mas que la ultima fecha de envio del boletin y la fecha fin es un date.now que es la fecha actual en que se va a enviar el newsletter.

Seria cuestion de separar de cada textbox el dia, el mes el año y meterlo en lo que me pusistes....

dim fechainicio as DateTime = new DateTime(anioIni, mesIni, diaIni)
dim fechafin as DateTime = new DateTime(anioFin, mesFin, diaFin)

Pero tendria que usar split y eso para sacar numero por numero cada vez que encuentre un "/"...

Sera que asi funciona???

voy a probar.... de todos modos echale un ojo a lo que puse en este post...

Saludos...
__________________
Ing. Javier Ugalde
Desarrollador de Aplicaciones Web / Windows
Director de Desarrollos Web
Ing. en Información
Email: [email protected]
Telf. Hab: +[58] - (243) - 232.02.06
Telf. Cel: +[58] - (414) - 455.26.80
  #19 (permalink)  
Antiguo 17/05/2004, 08:22
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0
Bueno, yo creía que la fecha la introducias tu en el textBox, pero en tu caso yo lo que haría es almacenar la fecha de inicio como un objeto dateTime en session al traerla de la base de datos, y la fecha actual obtenerla en el momento de ir a realizar el envio con un dateTime.Now.
Pero si optas por la otra forma, recuerda que a la fecha de fin debes hacerle
fechaFin = fechaFin.AddDays(1), ya que al crearla de esa manera te pone la hora a las 0:00:00, y si has introducido noticias en el último dia no te las tendría en cuenta.
No se si me he explicado muy bien, espero que por lo menos se entienda.

Salu2
  #20 (permalink)  
Antiguo 20/05/2004, 20:21
Avatar de MsTech.DotNet  
Fecha de Ingreso: marzo-2003
Ubicación: Maracay - Edo. Aragua
Mensajes: 605
Antigüedad: 21 años, 1 mes
Puntos: 0
Problema resuelto... lo que hice fue poner tanto la consulta como en la bd, el formato de la fecha en "yyyy/mm/dd" y funciono a la perfección...

Lo publico por si alguien más tiene este problema...

Saludos...

Javier...
__________________
Ing. Javier Ugalde
Desarrollador de Aplicaciones Web / Windows
Director de Desarrollos Web
Ing. en Información
Email: [email protected]
Telf. Hab: +[58] - (243) - 232.02.06
Telf. Cel: +[58] - (414) - 455.26.80
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 00:03.