Visual Basic - EVIOS MASIVOS

Life is soft - evento anual de software empresarial
   
Vista:

EVIOS MASIVOS

Publicado por Diego (33 intervenciones) el 19/10/2015 12:43:18
GRACIAS DE ANTEMANO

Tengo un programa que evía correos masivamente. Uso como metodo de envio
Dim SmtpClient As New Net.Mail.SmtpClient
......
.......

SmtpClient.Send(MailMessage)

Mi problema es que despues de un tiempo me acaba dando system.out.of,memory y supongo que es por que el objeto no se destruye y se está almacenando en memoria. Auque si sigo la ram despues de cada envio se libera pero en algunos correos empieza a subir de manera escandalosa.
Estoy con el framework 3.5 el cual no tiene SmtpClient.Dispose

He probado a migrar a framework 4.0 que si tiene SmtpClient.Dispose pero el problema persiste.

Alguien me puede ayudar ????
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
Imágen de perfil de Andres Leonardo

EVIOS MASIVOS

Publicado por Andres Leonardo (702 intervenciones) el 19/10/2015 17:27:18
Intenta con

Set SmtpClient = Nothing

SAludos
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

EVIOS MASIVOS

Publicado por Diego (33 intervenciones) el 19/10/2015 18:12:57
no me soluciona el problema pero gracias por colaborar
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
Imágen de perfil de Andres Leonardo

EVIOS MASIVOS

Publicado por Andres Leonardo (702 intervenciones) el 19/10/2015 20:19:06
Pues la otra seria ver por que razon la memoria se sube .. en ciertos casos y atender a esos ...

La sentencia de codigo que te puse era despues de cada envio libere la memoria del objeto.
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

EVIOS MASIVOS

Publicado por Diego (33 intervenciones) el 20/10/2015 09:11:37
ESTE ES MI CODIGO DE ENVIO SIMPLIFICADO EN UNA APLICACION DE PRUEBA. En la aplicacion real hago consultas a bbdd y actualizaciones en la pantalla. De forma aleatoria el proceso me hace incrementos de ram escandalosos. Como estar en 30 mb y subir a 600... a los x minutos a 900 despues 1.3... hasta el system.out.of.memory. Si repito el proceso me vuelve a subir pero no justamente en los mismo mails que la vez anterior.
ESTE SIMPLE CODIGO AUMENTE 0.1 MB POR CADA 2 ENVIOS LO CUAL ME HACE SOSPECHAR DEL PROPIO SISTEMA

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
44
45
46
Dim TiempoEspera As Integer = 10 * 1000
Dim HtmlBody As String = "CUERPO ENVIO"
Dim To_ As String = "correodestino@pruebas.com"
 
Dim ServerUser As String = "diego@pruebas.com"
Dim ServerPassword As String = "pruebas2015"
Dim SmtpServer As String = "mail.pruebas.com"
 
 
 
If MsgBox("¿Iniciar?", MsgBoxStyle.YesNo, "Aviso") = MsgBoxResult.Yes Then
 
	For x = 1 To 5000
 
		Me.LblEnviados.Text = "Enviando (" & To_ & ")  " & x & " de 5000"
 
		Dim MailMessage As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage()
		MailMessage.To.Add(To_)
		MailMessage.From = New Net.Mail.MailAddress("diego@pruebas.com", "Diego", System.Text.Encoding.UTF8)
		MailMessage.Subject = "ENVIO MASIVO"
		MailMessage.SubjectEncoding = System.Text.Encoding.UTF8
		MailMessage.BodyEncoding = System.Text.Encoding.UTF8
		MailMessage.IsBodyHtml = True
		MailMessage.Priority = MailPriority.Normal
		MailMessage.Body = HtmlBody
 
 
		Dim SmtpClient As New Net.Mail.SmtpClient
		SmtpClient.Credentials = New System.Net.NetworkCredential(ServerUser, ServerPassword)
		SmtpClient.Host = SmtpServer
		SmtpClient.Timeout = 30000
		SmtpClient.Port = 587
		SmtpClient.Send(MailMessage)
 
		SmtpClient = Nothing
		MailMessage.Dispose()
 
		Application.DoEvents()
 
		Threading.Thread.Sleep(TiempoEspera)
	Next
 
 
	MsgBox("FIN !!!!!!")
 
End If
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

EVIOS MASIVOS

Publicado por Marcelo (225 intervenciones) el 24/10/2015 11:57:05
Ejecute tu codigo y no vi mayor aumento en el uso de la memoria. Seria interesante ver un ejemplode html body estas enviando en estos emails. tienes imagenes? El tipo de cuerpo cambia para cada destinatario?

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
44
45
46
47
48
49
50
51
52
53
54
55
56
Private Sub SendEmails()
 
        Dim TiempoEspera As Integer = 10 * 1000
        Dim HtmlBody As String = "CUERPO ENVIO"
        Dim To_ As String = "destination@gmail.com"
 
        Dim ServerUser As String = "youremail@hotmail.com" '"email@email.com"
        Dim ServerPassword As String = "yourpassword" '"password"
        Dim SmtpServer As String = "smtp.live.com" 'Tu servidor - Yo utilize live.com
 
        If MsgBox("Iniciar?", MsgBoxStyle.YesNo, "Aviso") = MsgBoxResult.Yes Then
 
            'Asumo que utilizas la misma cuenta de email para enviar todos los emails...
            Dim SmtpClient As New Net.Mail.SmtpClient()
            SmtpClient.Credentials = New System.Net.NetworkCredential(ServerUser, ServerPassword)
            SmtpClient.EnableSsl = True 'desabilitar - lo utilize para con live.com
            SmtpClient.Host = SmtpServer
            SmtpClient.Port = 25 '586 - cambiar si tu usas uno distinto.
 
            For x = 1 To 5000
 
                Me.Label1.Text = "Enviando (" & To_ & ")  " & x & " de 10"
 
                Dim MailMessage As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage()
                MailMessage.To.Add(To_)
                MailMessage.From = New Net.Mail.MailAddress("sender@email.com", "Diego", System.Text.Encoding.UTF8)
                MailMessage.Subject = "ENVIO MASIVO"
                MailMessage.SubjectEncoding = System.Text.Encoding.UTF8
                MailMessage.BodyEncoding = System.Text.Encoding.UTF8
                MailMessage.IsBodyHtml = True
                MailMessage.Priority = MailPriority.Normal
                MailMessage.Body = HtmlBody
 
                Debug.Print("Connection Name: " & SmtpClient.ServicePoint.ConnectionName)
 
                Try
                    SmtpClient.Send(MailMessage)
                    SmtpClient.ServicePoint.CloseConnectionGroup(SmtpClient.ServicePoint.ConnectionName)
                Catch ex As Exception
                    MsgBox("error: " & ex.Message)
                End Try
 
                MailMessage = Nothing
                Application.DoEvents()
 
                Threading.Thread.Sleep(TiempoEspera)
 
            Next
 
            SmtpClient.Dispose()
 
            MsgBox("FIN !!!!!!")
 
        End If
 
    End Sub
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

EVIOS MASIVOS

Publicado por Diego (33 intervenciones) el 27/10/2015 09:53:23
ES EL CÓDIGO QUE HE ADJUNTADO !!!!!!!!!!
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