0

写真を適切に埋め込むことができません。メールが届いたときに、添付ファイルとしてしか表示されません。「動的」な部分は、電子メール内の画像の数が、送信されるまでわからないことです。これは、HTML が送信される前の例です。

<html>
<body>
<h1>LineOne</h1>
<p>LineTwo</p>
<img src='cid:1' alt='ImageOne'></img>
<img src='cid:2' alt='ImageTwo'></img>
</body>
</html>

メールが届くが、テキストのみが表示され、画像は添付ファイルとして表示されます。違いがある場合は、VB.NET で LinkedResources を使用しています。同じコードを使用して単一の画像 (つまり、動的ではない) を送信すると、適切に埋め込まれました。今回は何が違うのか理解できません。

編集: これが私の VB コードです。コンテキストを少し追加します。

Private Sub TimeBeforeEmailSent_Tick(sender As System.Object, e As System.EventArgs)      Handles TimeBeforeEmailSent.Tick
    Dim sendEmail As New sendEmail
    Dim image(numberOfPhotosTaken) As Object
    For i = 1 To numberOfPhotosTaken
        image(i) = New LinkedResource((Mid(Application.ExecutablePath, 1, (Application.ExecutablePath.Length - 9)) + i.ToString + ".jpg"), "image/jpeg")
    Next
    sendEmail.write(numberOfPhotosTaken, image)
    TimeBeforeEmailSent.Enabled = False
End Sub

クラス sendEmail は次のとおりです。

Imports System.Net.Mail
Imports System.IO


Public Class sendEmail
Dim bodyText As String = "<html><body><h1>Heading</h1><p>Body</p>"
Dim alternateView As AlternateView = AlternateView.CreateAlternateViewFromString(bodyText, Nothing, "text/html")



Public Sub write(numberOfPhotosTaken As Integer, image As Array)
    For i = 1 To numberOfPhotosTaken
        Try
            image(i).ContentId = i
            image(i).TransferEncoding = Net.Mime.TransferEncoding.Base64
            alternateView.LinkedResources.Add(image(i))
            bodyText = bodyText & "<img src='cid:" & i & "' alt='image from webcam'></img>"
        Catch ex As Exception
            'This exception means two or more photos were taken in such quick succession that the camera couldn't keep up
            'Therefore, the program thinks more photos were taken than actually exist
        End Try
    Next
    bodyText = bodyText & "</body></html>"
    Dim Mail As New MailMessage
    Mail.Headers.Add("Content-Type", "multipart/related")
    Mail.Headers.Add("Content-Disposition", "inline")
    Mail.AlternateViews.Add(alternateView)
    Mail.Subject = "Subject"
    Mail.To.Add(Lockscreen.sendToAddress)
    Mail.From = New MailAddress(removed for privacy)
    Mail.Body = Nothing
    send(Mail)
End Sub


Sub send(Mail)
    Dim SMTP As New SmtpClient
    SMTP.EnableSsl = True
    SMTP.Credentials = New System.Net.NetworkCredential(removed for privacy)
    SMTP.Port = "587"
    SMTP.Host = "smtp.gmail.com"
    SMTP.Send(Mail)
    Dim filePath As String
    For i = 1 To Lockscreen.numberOfPhotosTaken
        Try
            filePath = (Mid(Application.ExecutablePath, 1, (Application.ExecutablePath.Length - 9)) + i.ToString + ".jpg")
            File.Delete(filePath)
        Catch ex As Exception
        End Try
    Next
End Sub

クラス終了

4

1 に答える 1

0

LinkedResourceを作成してメールに追加する場所にコードを追加していませんが、次のことを確認してください。

  1. を構築するときは、画像の正しい ContentType を渡すことができるコンストラクターLinkedResourceを使用してください。

  2. MailMessageオブジェクトに 2 つのヘッダーを追加します。

    _mail.Headers.Add("Content-Type", "マルチパート/関連")

    _mail.Headers.Add("Content-Disposition", "inline")

于 2013-08-13T22:05:45.623 に答える