我在 VB.net 项目上的附件内存流有一个常见的问题。我正在调用一个共享成员(SendMail),传入一个客户对象和一个要作为附件发送的文件的内存流。在“SendMail”中,它调用两个独立的函数来准备一封普通电子邮件和另一个用于数字签名的电子邮件。我遇到的问题是我收到了完美的数字签名电子邮件,但是,在普通电子邮件中,附件是空白的,并且附加了文件名(64 B)。如果我禁用数字签名的部分常规邮件工作正常。看起来内存流在数字签名中的某个地方发生了变化。
这是他我打电话的方式
mailHelper.SendMail(cust, attachment)
使用 mailHelper 类
Public Shared Sub SendEmail(ByVal cust As Customer, ByVal attachment As MemoryStream)
Dim messages As New List(Of MailMessage)
messages.Add(CreateUnSignedMail(cust,attachment)
messages.Add(CreateSignedMail(cust,attachment)
SendSMTPMail(messages)
End Sub
Private Shared Function CreateUnSignedMail(ByVal cust As Customer, ByVal attachment As MemoryStream) As MailMessage
Dim eMail As New MailMessage()
With eMail
.//Normal properties set (like to, from etc)
.Attachments.Add(New Attachment(attachment, "someFilename.doc")
End With
Return eMail
End Function
Private Shared Function CreateSignedMail(ByVal cust As Customer, ByVal attachment As MemoryStream) As MailMessage
Dim eMail As New SecureMailMessage()
With eMail
.//Normal properties set (like to, from etc)
.Attachments.Add(New SecureAttachment(attachment, "someFilename.doc")
End With
Return eMail
End Function
Private Shared Sub SendSMTPMail(ByVal messages As List(Of System.Net.Mail.MailMessage))
Dim smtp As New SmtpClient("myServer")
Try
With smtp
.//Additional properties set
For Each email In messages
.Send(email)
Next
End With
Catch ex As Exception
//Log error to file.
Logger.Log.Error("SMTP Error", ex)
Throw
End Try
End Sub
但是,如果我尝试以下方法,它可以正常工作,这是正确的解决方案吗?
messages.Add(SendUnSignedMail(cust, New MemoryStream(attachment.ToArray())))
messages.Add(SendSignedMail(cust, New MemoryStream(attachment.ToArray())))