2011-09-20 57 views
2

请有人给我一些关于如何发送带有MULTIPLE嵌入式图像的电子邮件的指针。带有多个嵌入式图像的VB.NET电子邮件

我可以发送一个基本电子邮件,我还可以使用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)` 

我只是不能解决如何获得多个图像在那里。

很多谢谢

Richard。

回答

2

它涉及2个循环。

1循环在身体的creatng点。使用

调用此从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

我已经在C#中完成了此操作。开始使用Bitmap对象,并使用LinkedResource ID将它们链接到我的HTML源代码中。然后我将包含HTML源代码的AlternateView作为电子邮件正文附加到我的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); 
+0

嗨。这不仅仅是添加一个图像吗? –

+0

是的,但只要你有不同的ID,你可以像这样添加尽可能多的。 – Brissles

+0

@Brissles:那我真的不明白你的答案中的重点。正如理查德在他的问题中所写的那样:“我可以发送一封基本的电子邮件,并且我还可以使用AlternateView'发送带有单个嵌入式图像的电子邮件。他已经知道如何做*那*。 – Heinzi

3

只需添加多个链接的资源。为了澄清:

在你的身体,添加多个图像引用:

<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 

(这似乎有点太简单了。如果我误解了你问题请说清楚。)

+0

这很简单,但图像的数量不固定,范围可以从1到10. –

+0

@Richard:然后做一个循环。你需要帮助吗? – Heinzi

相关问题