Member 13142345 Ответов: 1

Как удалить прикрепление изображения в приведенном ниже коде VB .NET


Привет,
Я искал в интернете отправку письма с изображением, встроенным в тело письма.
Я нашел приведенный ниже код, и я интегрировался с моим приложением windows forms в vb .net, и он хорошо работает с моим приложением.

Но проблема в том, что он прикрепляет изображение и отображается как встроенное изображение в теле.

Я не хочу, чтобы изображение отображалось как вложение.

может ли кто-нибудь помочь мне изменить приведенный ниже код.

Что я уже пробовал:

Public Sub SendEmail()
 
        'CREATE MAIL MESSAGE
        Using myMailMessage As New MailMessage
 
            myMailMessage.To.Add("recipent@domain.com")
            myMailMessage.From = New MailAddress("me@mydomain.com")
            myMailMessage.Subject = "This is the email subject"
            myMailMessage.Body = "This is the default text body"
            myMailMessage.IsBodyHtml = True 'THIS WILL MAKE THE MESSAGE USE THE ALT HTML VIEW
 
            'CREATE ALT HTML BODY THAT WILL INCLUDE EMBEDDED IMAGE
            'NOTE THE IMG SRC IS CID:ThePictureID
            Dim myMailHTMLBody = "<html><head></head><body>This is a test and should include a picture: <img src=cid:ThePictureID></body></html>"
 
            'BYTES ARRAY OF IMAGE SO WE CAN PUT IN MEMORY STREAM
            Dim myImageData() As Byte = Nothing
 
            'GRAB IMAGE FROM FILE AND PUT IN MEMORY STREAM
            Using myImage = Image.FromFile("C:\directory\image.jpg")
                Dim IC As New ImageConverter
                myImageData = DirectCast(IC.ConvertTo(myImage, GetType(Byte())), Byte())
            End Using
 
            Using myStream As New MemoryStream(myImageData)
                'CREATE ALT VIEW
                Dim myAltView As AlternateView = AlternateView.CreateAlternateViewFromString(myMailHTMLBody, New System.Net.Mime.ContentType("text/html"))
                'CREATE LINKED RESOURCE FOR ALT VIEW
                Dim myLinkedResouce = New LinkedResource(myStream, "image/jpeg")
                'SET CONTENTID SO HTML CAN REFERENCE CORRECTLY
                myLinkedResouce.ContentId = "ThePictureID" 'this must match in the HTML of the message body
 
                'ADD LINKED RESOURCE TO ALT VIEW, AND ADD ALT VIEW TO MESSAGE
                myAltView.LinkedResources.Add(myLinkedResouce)
                myMailMessage.AlternateViews.Add(myAltView)
 
                'SEND EMAIL
                Using mySMTP As New SmtpClient
                    mySMTP.Host = "smtp.yourdomain.com"
                    mySMTP.Credentials = New System.Net.NetworkCredential("you@domain.com", "password")
                    mySMTP.Send(myMailMessage)
                End Using
 
            End Using
        End Using
    End Sub

1 Ответов

Рейтинг:
1

Dave Kreskowiak

Если вы не хотите, чтобы изображение отображалось в HTML, зачем вы включили тег img в тело письма, чтобы показать его?

<img src=cid:ThePictureID>


Member 13142345

Извиняюсь. Я тебя не понял...

Member 13142345

Я хочу, чтобы изображение отображалось внутри тела, но не как привязанность.
Теперь приведенный выше код выполняет оба сценария.

мне не нужен образ в качестве приложения

Dave Kreskowiak

Ваш первоначальный пост оставил некоторое пространство для интерпретации, и я пропустил то, что вы действительно пытались сказать.

Вам придется встроить данные изображения в тег img:

    <img src="data:image/jpg;base64,...base64String..." />


Вы можете преобразовать изображение, используя что-то вроде:
    MemoryStream ms = new MemoryStream();
    myBitmap.Save(ms, Imaging.ImageFormat.Jpeg);
    byte[] imgData = ms.ToArray();
    string base64Data = Convert.ToBase64String(imgData);

Имейте в виду, что не все почтовые клиенты и браузеры поддерживают отображение изображений со встроенными данными!