2011-09-20 14 views
2

複数の埋め込みイメージを使用して電子メールを送信する方法について、いくつかの指摘をいただけますか。複数の埋め込みイメージを持つVB.NET電子メール

私は基本的なメールを送ることができますし、私も私が持っているのXElementとしてAlternateView、bodyText当該では

を使用して、単一の埋め込まれた画像を電子メールで送信することができます。そして、私はこのような代替ビューを追加<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)` 

私はそこに複数の画像を取得する方法はありません。

ありがとうございました

リチャード

答えて

2

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

これまではC#でこれを行っています。ビットマップオブジェクトで始まり、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

@リチャード:ループを作ってください。あなたはそれに助けが必要ですか? – Heinzi

関連する問題