Обычная проблема с вложением system.net.mail
У меня обычная проблема с потоком памяти моих вложений в проекте VB.net. Я звоню общему члену (SendMail), передавая объект клиента и поток памяти файла, который будет отправлен как вложение. В "SendMail" он вызывает две отдельные функции, чтобы подготовить одно обычное письмо, а другое - к письму с цифровой подписью. У меня проблема в том, что я получаю электронное письмо с цифровой подписью, но в обычном электронном письме вложение пустое и к нему добавлено имя файла (64 B). Если я отключу часть цифровой подписи, обычная почта будет работать нормально. Похоже, где-то поток памяти изменяется в цифровой подписи.
Вот его, как я звоню
mailHelper.SendMail(cust, attachment)
с помощью mailHelper CLASS
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())))
1 ответ
Предположим, вы уже исправили это, учитывая задержку в получении ответа, но в любом случае вот моя попытка...
Существует несколько перегрузок для создания вложения, и ни одна из них не соответствует тому, как вы инициализировали вложение.
При создании вложения второй параметр должен иметь значение NULL или определять допустимый MIME-тип для вашего вложения.
Надеюсь это поможет.