写真を適切に埋め込むことができません。メールが届いたときに、添付ファイルとしてしか表示されません。「動的」な部分は、電子メール内の画像の数が、送信されるまでわからないことです。これは、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
クラス終了