Inserire immagine nel corpo di una email

di il
5 risposte

Inserire immagine nel corpo di una email

Buongiorno a tutti,

Ho difficoltà ad inserire un immagine nel corpo dell'email.
L'immagine è all'interno di una PictureBox dinamica, è non è salvata da nessuna parte sul pc.
Io vorrei inserire questa PictureBox nel corpo dell'email, ma è impossibile siccome posso inserire solo formati testo.
Se metto il mail.IsBodyHtml = True potrei inserire immagine, ma pultroppo è necessario un percorso dell'immagine che io non ho.
Qualcuno si è già scontrato con questo "problema"?

utilizzo Imports System.Net.Mail.

		
	Try
 		 Dim SmtpServer As New SmtpClient()
                Dim mail As New MailMessage()
                SmtpServer.Credentials = New Net.NetworkCredential("email", "pss")
                SmtpServer.Port = n°porta
                SmtpServer.Host = "server host"
                mail = New MailMessage()
                mail.From = New MailAddress("email")
                mail.To.Add(destinatario)
                mail.Subject = "prova"
                mail.Body = "corpo dell' email"
                SmtpServer.Send(mail)
                ' MsgBox("mail send")
            Catch z As SmtpException
                Console.WriteLine("SMTP: " & z.Message)
                Console.WriteLine(e.ToString)
            Catch z As Exception
                Console.WriteLine("ERRORE: " & z.Message)
            End Try

5 Risposte

  • Re: Inserire immagine nel corpo di una email

    Devi creare una "vista alternativa" del tuo messaggio in formato HTML aggiungendo poi l'immagine come LinkedResource e attribuendole un ID univoco; all'interno del messaggio, puoi inserire un tag IMG che faccia riferimento alla risorsa.

    Vedi questo esempio.

    Ciao!
  • Re: Inserire immagine nel corpo di una email

    Grazie mille Alka,
    avevo già visto questo esempio.
    Ma mi da un errore su server.MapPath con System.Net.Sockets.Tcplistener
    
       mail.IsBodyHtml = True
       Dim inlineLogo = New LinkedResource(server.MapPath(image_.Image))
       inlineLogo.ContentId = Guid.NewGuid().ToString()
    
  • Re: Inserire immagine nel corpo di una email

    ors ha scritto:


    avevo già visto questo esempio.
    Ma mi da un errore su server.MapPath con System.Net.Sockets.Tcplistener
    E' molto semplice: NON usare Server.MapPath in quel contesto.

    A che ti servirebbe? Se devi utilizzare un percorso fisico, passalo al metodo di creazione della mail già "decodificato" dall'esterno.

    Oppure fai uso di una risorsa da cui estrarre dei byte o di un tipo di immagina per il quale non devi convertire un path nel momento di creazione della mail.

    Ciao!
  • Re: Inserire immagine nel corpo di una email

    Ok alka, ho provato in questo modo,SENZA USARE SERVER.MAPPATCH ma non mi arriva email, E non mi ritornano messaggi di errore
    
    		Dim htmlBody As String = "CIAOOO"
                    mail.IsBodyHtml = True
                    mail.Body = htmlBody
                    Dim htmlview As AlternateView = Nothing
                    htmlview = AlternateView.CreateAlternateViewFromString(htmlBody, Nothing, "Image/jpg")
                    Dim imageResourceEs As LinkedResource = New LinkedResource("image_.Image")
                    imageResourceEs.ContentId = "photo"
                    imageResourceEs.TransferEncoding = System.Net.Mime.TransferEncoding.Base64
                    htmlview.LinkedResources.Add(imageResourceEs)
                    mail.AlternateViews.Add(htmlview)
                    htmlBody = htmlBody & "<img src=""cid:photo"">" & Environment.NewLine
                    SmtpServer.Send(mail)
    
  • Re: Inserire immagine nel corpo di una email

    Ho risolto il problema, posto la soluzione se può servire a qualcuno, e ti ringrazio molto Alka per l'aiuto
    
      mail.IsBodyHtml = True
                    Dim myMailHTMLBody = "<html><head></head><body><img src=cid:ThePictureID></body></html>"
                    Dim myImageData() As Byte = Nothing
                    Using myImage = image_.Image
                        Dim IC As New ImageConverter
                        myImageData = DirectCast(IC.ConvertTo(myImage, GetType(Byte())), Byte())
                    End Using
                    Using myStream As New MemoryStream(myImageData)
                        Dim myAltView As AlternateView = AlternateView.CreateAlternateViewFromString(myMailHTMLBody, New System.Net.Mime.ContentType("text/html"))
                        Dim myLinkedResouce = New LinkedResource(myStream, "image/jpeg")
                        myLinkedResouce.ContentId = "ThePictureID"
                        myAltView.LinkedResources.Add(myLinkedResouce)
                        mail.AlternateViews.Add(myAltView)
                        SmtpServer.Send(mail)
                        ' MsgBox("mail send")
                    End Using
    
Devi accedere o registrarti per scrivere nel forum
5 risposte