Private Function createCustomReplyMessage(ByVal originalMessage As MailMessage, ByVal replyText As String, ByVal fromAddress As String) As MailMessage
' 元のメッセージのクローンを作成します。
Dim replyMessage As MailMessage = TryCast(originalMessage.Clone(), MailMessage)
' 受信者アドレスを設定します。
If Not String.IsNullOrWhiteSpace(replyMessage.ReplyTo) Then
replyMessage.To = replyMessage.ReplyTo
ElseIf Not String.IsNullOrWhiteSpace(replyMessage.From) Then
replyMessage.To = replyMessage.From
End If
' 送信者のアドレスを設定します。
replyMessage.From = fromAddress
' これが返信であることを示すため、件名に"Re: "を付けます。
replyMessage.Subject = "Re: " & originalMessage.Subject
' メッセージの一部のプロパティをクリアします。
replyMessage.ReplyTo = ""
replyMessage.Cc = ""
replyMessage.Sender = ""
' 返信テキストの後に元のメッセージのヘッダフィールドとテキストを追加して、
' 返信するメッセージテキストを設定します。
Dim messageText As String = replyText & Environment.NewLine & Environment.NewLine
messageText &= "From: " & originalMessage.From & Environment.NewLine
messageText &= "Sent: " & originalMessage.Date.ToString() & Environment.NewLine
messageText &= "To: " & originalMessage.To & Environment.NewLine
messageText &= "Subject: " & originalMessage.Subject & Environment.NewLine & Environment.NewLine
' プレーンテキストを設定します。
replyMessage.Text = messageText & originalMessage.Text
' HTMLテキストを設定します。
Dim html As String = originalMessage.Html
' HTML文字列内の返信テキストを挿入する位置を特定します。
Dim textStartIndex As Integer = html.ToLower().IndexOf("<body")
If textStartIndex = -1 Then
textStartIndex = html.ToLower().IndexOf("<html")
End If
textStartIndex = html.IndexOf(">", textStartIndex) + 1
' 返信テキストをHTML文字列に挿入し、Body.Htmlを設定します。
messageText = "<div style=""color:black"">" & messageText.Replace(vbCrLf, "<br />") & "</div>"
html = html.Insert(textStartIndex, messageText)
replyMessage.Html = html
Return replyMessage
End Function