обычная проблема с вложением system.net.mail - PullRequest
0 голосов
/ 25 января 2011

У меня обычная проблема с потоком памяти моих вложений в проекте 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 Ответ

0 голосов
/ 07 июня 2011

Предположим, вы уже исправили это, учитывая задержку получения ответа, но в любом случае это моя попытка ...

Существует довольно много перегрузок для создания вложения, но ни одна из них не соответствует тому, как вы инициализировалиВложение.

При создании вложения второй параметр должен иметь значение NULL или определять допустимый MIME-тип для вашего вложения.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...