Электронная почта VB.NET с несколькими встроенными изображениями - PullRequest
2 голосов
/ 20 сентября 2011

Может, кто-нибудь подскажет, как отправить электронное письмо с НЕСКОЛЬКИМИ встроенными изображениями.

Я могу отправить простое электронное письмо, а также отправить электронное письмо с одним встроенным изображением, используя AlternateView,

В bodyText как XElement у меня есть: <img src='cid:SCREENSHOT'/>

Затем я добавляю альтернативное представление так:

Dim htmlContent As AlternateView =    AlternateView.CreateAlternateViewFromString(bodyText.ToString(), Nothing, mediaType)

    If (IO.File.Exists(screenshotPath)) Then

        Dim screenshot As New LinkedResource(screenshotPath)

        screenshot.ContentId = "SCREENSHOT"
        htmlContent.LinkedResources.Add(screenshot)

    End If

    msg.AlternateViews.Add(htmlContent)`

Я просто не могу понять, как добавить туда несколько изображений.

Большое спасибо

Ричард.

Ответы [ 3 ]

3 голосов
/ 20 сентября 2011

Просто добавьте несколько связанных ресурсов. Для уточнения:

Добавьте в ваше тело несколько ссылок на изображения:

 <img src='cid:SCREENSHOT1'/>
 <img src='cid:SCREENSHOT2'/>

В своем коде добавьте несколько изображений:

If (IO.File.Exists(screenshotPath1)) Then
    Dim screenshot As New LinkedResource(screenshotPath1)
    screenshot.ContentId = "SCREENSHOT1"
    htmlContent.LinkedResources.Add(screenshot)
End If

If (IO.File.Exists(screenshotPath2)) Then
    Dim screenshot As New LinkedResource(screenshotPath2)
    screenshot.ContentId = "SCREENSHOT2"
    htmlContent.LinkedResources.Add(screenshot)
End If

(Это кажется слишком простым. Если я неправильно понял ваш вопрос, скажите, пожалуйста.)

2 голосов
/ 22 сентября 2011

Включает 2 цикла.

1 цикл в точке создания тела.

Вызовите это из BodyText, используя: <%= CreateImages(imagePaths, hasCustImage) %>

Private Shared Function CreateImages(ByVal imagePaths As IList(Of String), ByVal hasCustImage As Boolean) As XElement

    Dim images As XElement = <span></span>
    Dim temp As XElement = Nothing

    For i As Integer = 0 To imagePaths.Count - 1

        Dim img As String = String.Format("cid:ItemImage{0}", i + 1)

        If ((i = (imagePaths.Count - 1)) And (hasCustImage)) Then

            temp = _
                <p style="font-family: Arial; font-size: 10pt">
                    Customer:<br/>
                    <img src=<%= img %>/>
                </p>

        Else

            temp = _
                <p style="font-family: Arial; font-size: 10pt">
                    <img src=<%= img %>/>
                </p>

        End If

        images.Add(temp)

    Next

    Return images

End Function

Другой циклсоздать альтернативные виды:

msg.Body = bodyText.ToString()

    Dim htmlContent As AlternateView = AlternateView.CreateAlternateViewFromString(bodyText.ToString(), Nothing, mediaType)

    For i As Integer = 0 To imagePaths.Count - 1

        If (IO.File.Exists(imagePaths(i))) Then

            Dim itemImage As New LinkedResource(imagePaths(i))

            itemImage.ContentId = String.Format("ItemImage{0}", i + 1)
            htmlContent.LinkedResources.Add(itemImage)

        End If

    Next

    msg.AlternateViews.Add(htmlContent)

    Return Utils.Send(msg)
0 голосов
/ 20 сентября 2011

Я делал это раньше в C #.Начал с растровых объектов и связал их с моим источником HTML с помощью идентификаторов LinkedResource.Затем я прикрепил AlternateView, содержащий исходный код HTML, в качестве тела сообщения к моему MailMessage.

        String id1= "yourid";
        AlternateView htmlView = AlternateView.CreateAlternateViewFromString("<img src=cid:" + id1 + ">",null, "text/html"); // add to html as required

        Bitmap rc_img1 = new Bitmap(rc_bar.GetBitmap());

        MemoryStream ms = new MemoryStream();
        rc_img1.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        ms.Seek(0, SeekOrigin.Begin);

        LinkedResource myImg1 = new LinkedResource(ms);
        myImg1.ContentId = id1;
        htmlView.LinkedResources.Add(myImg1);

        mail.AlternateViews.Add(htmlView);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...