Visual Basic.NET - Inconvenientes al enviar mails desde una aplicación en visual.net

 
Vista:
sin imagen de perfil
Val: 93
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Inconvenientes al enviar mails desde una aplicación en visual.net

Publicado por María Inés Burgos (49 intervenciones) el 18/07/2018 23:29:41
Buenos días! Primero que nada agradezco mucho a toda la gente que participa del foro, he avanzado un montón gracias a todos los aportes (leyéndolos y en preguntas que he hecho) ya que yo no sabía nada de nada.
Me encuentro trabada una vez más y recurro a su ayuda porque se me han quemado los papeles.
Es un poco embrollado lo que quiero hacer así que espero poder explicar (se aceptan mejores ideas o sugerencias desde luego)
Estoy añadiendo a mi programa una función que envíe mails de saludo de cumpleaños a la gente que tengo almacenada en la base de datos.
En un datagridview, a través de una consulta SQL, recupero el campo donde guardo el nombre de la persona y el email de los cumpleañeros. Bien, como quiero personalizar el saludo, quise usar una imagen de fondo cual tarjeta y escribir sobre ella el nombre de la persona, entonces leí que lo aconsejable era hacerlo con código HTML en el cuerpo del mensaje y que si quería escribir sobre la imagen, creara una tabla. Hasta ahí voy bien.
Con un foreach recorro el datagridview y mando los mails, cada uno con su asunto personalizado y lo que escribo sobre la imagen, cambia acorde al nombre de la persona.
El problema lo tengo con la imagen que pego, que se me sigue agregando cada vez que mando un mail, o sea en el 2do mail van 2 attachments, en el 3er mail van 3 y así. No sé cómo "limpiar" eso para que no suceda.
El otro conflicto que tengo que resolver es cómo hago para que la tabla, con la imagen de fondo y su contenido se reduzca proporcionalmente si uno por ejemplo ve el mail desde un celular o pantalla más chica. Sé que se puede hacer pero estoy poco más que perdida.
Paso a dejarles el código que empleo para que me digan dónde puedo o cómo puedo poner un "clear" o algo así como para que se me limpien los attachments, esto de enviar la imagen lo hago con un LinkedResource. Intenté usar un clear en el LinkedResource pero me lo manda igual, nomás que sin nombre. Por más que limpio las cajas de texto que uso para escribir el mensaje, queda la imagen ya "cargada". Este módulo lo uso en el botón "enviar" de un formulario donde le paso las variables. Otra cosa que me gustaría saber si es que se puede en lugar de usar el "send" mandar a borradores los mails, explico por qué. Si yo abro el viernes la aplicación, generé una función que me muestra los cumpleaños del viernes y también los del sábado y domingo, dado que esos días yo probablemente no use la aplicación entonces quería seleccionar los correos que quiero enviar ese día y los otros mandarlos a borrador para enviarlos luego, ya que el programa estará en una pc que no voy a tener disponible el fin de semana, de esta manera desde mi celular puedo enviar los mails.

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
Imports System.Net
Imports System.Net.Mail
 
Module Correo
 
    Private correos As New MailMessage
    Private envios As New SmtpClient
 
    Sub enviarCorreo(ByVal emisor As String, ByVal password As String, ByVal mensaje As String, ByVal asunto As String, ByVal destinatario As String)
        Dim MIHTML As String = Frm_Mail.RTB_Mensaje.Text 'TEXTO HTML QUE SE ENVIARA
        Dim VISTAHTML As AlternateView = AlternateView.CreateAlternateViewFromString(MIHTML, Nothing, System.Net.Mime.MediaTypeNames.Text.Html)
        Try
            Dim IMAGEN1 As LinkedResource = New LinkedResource("C:\Users\Downloads\tarjeta.png", System.Net.Mime.MediaTypeNames.Image.Jpeg)
            IMAGEN1.ContentId = "IMG1"
            VISTAHTML.LinkedResources.Add(IMAGEN1)
            correos.AlternateViews.Add(VISTAHTML)
 
            correos.To.Clear()
            correos.Body = ""
            correos.Subject = ""
            correos.Body = mensaje
            correos.Subject = asunto
            correos.IsBodyHtml = True
            correos.To.Add(Trim(destinatario))
 
            correos.From = New MailAddress(emisor)
            envios.Credentials = New System.Net.NetworkCredential(emisor, password)
 
            envios.Host = "smtp.live.com"
            envios.Port = 587
            envios.EnableSsl = True
 
            envios.Send(correos)
            MsgBox("El mensaje fue enviado correctamente. ", MsgBoxStyle.Information, "Mensaje")
 
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Mensajeria 1.0 vb.net ®", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
 
    End Sub
 
End Module


La última parte de mi pregunta, de adaptar el tamaño a una pantalla más pequeña estoy segura que no corresponde a este foro, pero como está todo vinculado lo pondré aquí igual, si no corresponde desde ya pido disculpas. Agradecería al menos me digan un término de búsqueda como para poder leer al respecto ya que de HTML no sé nada. Este es el texto que pongo en un textbox (o sea es el "mensaje" de la función anteriormente pegada) para enviar la tabla con la foto de fondo y el texto escrito en una variable "Nombre" que completo a través de una función en visual (el cid:IMG1 es la imagen de arriba también)

<table width="703" border="0" cellpadding="0" cellspacing="0" background="cid:IMG1">
<tr>
<td height="1000"; style="text-align: center; vertical-align: middle; font-size: 55px; color:#FF33FC"><p font face="Berlin Sans FB Demi"><br/><br/><b><i>Nombre</i></b></p></td><br /><br/></tr></table>

Desde ya muchas gracias a todos!

Saludos, María Inés
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 gilman
Val: 224
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Inconvenientes al enviar mails desde una aplicación en visual.net

Publicado por gilman (81 intervenciones) el 19/07/2018 09:30:16
El problema está con:
1
2
3
4
Dim IMAGEN1 As LinkedResource = New LinkedResource("C:\Users\Downloads\tarjeta.png", System.Net.Mime.MediaTypeNames.Image.Jpeg)
IMAGEN1.ContentId = "IMG1"
VISTAHTML.LinkedResources.Add(IMAGEN1)
correos.AlternateViews.Add(VISTAHTML)

Cada vez que ejecutas el procedimiento creas una nueva imagen y la añades a la variable global VISTAHTML, prueba con:
1
2
3
4
5
6
7
8
9
10
'Declaramos la variable IMAGEN1 Static para que conserve su valor entre llamadas al procedimiento
Static IMAGEN1 As LinkedResource
If IMAGEN1 Is Nothing Then
    'Si la variable es Nothing es la primera vez que llamamos al procedimiento
    'Cargar la imagen y añadirla al correo solo la primera vez
    IMAGEN1 = New LinkedResource("C:\Users\Downloads\tarjeta.png", System.Net.Mime.MediaTypeNames.Image.Jpeg)
    IMAGEN1.ContentId = "IMG1"
    VISTAHTML.LinkedResources.Add(IMAGEN1)
    correos.AlternateViews.Add(VISTAHTML)
End If

Sobre la segunda pregunta ni idea
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 93
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Inconvenientes al enviar mails desde una aplicación en visual.net

Publicado por María Inés (49 intervenciones) el 19/07/2018 17:31:16
Muchas gracias Gilman!!! Siempre muy amable por responder, tus aportes me han sido de gran ayuda! Estoy convencida que tienes razón pero me llevé la sorpresa cuando lo probé que sigue mandándome más adjuntos! En sí, el tema del HTML todavía no lo estudié con profundidad porque si no puedo resolver este tema, no me sirve, pero ayer me di cuenta probando que si lo mando a un mail de outlook no se ve la imagen, y debe ser por el código HTML. Pero al margen de eso, que lo atenderé luego si es que logro arreglar esto, probando el tema de los adjuntos a ver si anda, mandando en gmail me pone el AT001 que sería el 1er adjunto y después un 1+ que sería el otro adjunto en el segundo mail. Y no le hallo lógica porque lo que decís tenés toda la razón! Quizá le falte alguna línea de código en medio?
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
sin imagen de perfil
Val: 93
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Inconvenientes al enviar mails desde una aplicación en visual.net

Publicado por María Inés (49 intervenciones) el 19/07/2018 20:11:45
Pero si seré! Me aparecía un adjunto y +1 o +2 y me rompía la cabeza de por qué era eso... resulta que claro, como hice 500 mil pruebas voy borrando los mails que me automando y después se me ocurrió "y si es lo de la papelera?" y sí, es la papelera. Porque entraba al mail y aparecía 1 sola imagen, no dos... pero me ponía un "+1 archivo adjunto más". Era eso.
Eternamente agradecida a vos que me solucionaste esto!!! Ahora tendré que ver cómo hacer apropiadamente el HTML para que se vea adecuadamente.
Lo que sí te dejo 1 pregunta más y no jorobamos más: se puede hacer esto de en lugar de enviar ciertos mails, guardarlos en borrador en el mail desde el que uno emite? Yo vi lo que aparece cuando un pone el punto y send es lo único que sale, así que supongo que lo que pido no se puede hacer, pero como no tengo mucha idea, quería chequear con vos.
Te estoy eternamente agradecida de que siempre que pregunto algo te tomás el tiempo de responderme, de explicarme y acompañarme en el aprendizaje.
Muchas gracias!!

Un saludo!

María Inés

PD: si no se pueden mandar a borrador pensé auto-enviármelos los que no corresponden al día (como dije antes, en caso del fin de semana) y el fin de semana reenvío el mensaje haciendo unos ínfimos cambios manualmente. Así que ahora me voy a poner a ver el tema del HTML.
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 gilman
Val: 224
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Inconvenientes al enviar mails desde una aplicación en visual.net

Publicado por gilman (81 intervenciones) el 20/07/2018 08:08:47
No creo que se pueda guardar en borrador, de eso, creo, se encarga el programa de gestión de correo, outlook u otro, y el código para enviar los correos no necesita que tengas instalado nada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 93
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Inconvenientes al enviar mails desde una aplicación en visual.net

Publicado por María Inés (49 intervenciones) el 20/07/2018 17:29:56
Muchas gracias Gilman!!! Por siempre ayudarme! un abrazo desde Argentina!!!

Saludos, María Inés
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