У меня есть приложение, которое я построил в Visual Studio с использованием VB. NET, которое извлекает почтовые сообщения из почтового ящика Outlook, сохраняет информацию о сообщениях в базу данных и загружает вложения (если таковые имеются) в папку. Перед сохранением почтового сообщения в моей базе данных, если сообщение от определенного пользователя, я пересылаю сообщение в другой почтовый ящик (и, следовательно, я не сохраняю сообщение). Это все работает нормально, за исключением случаев, когда я пытаюсь переслать сообщение с вложениями.
Как указано в заголовке, я использую OpenPOP для получения почты и SMTP для передачи почты. Когда я пытаюсь создать вложение SMTP из сообщения OpenPOP, я получаю следующую ошибку:
System.InvalidCastException: преобразование из типа 'MessagePart' в тип 'String' недопустимо.
Сообщение добавляется в функцию AddAttachments (ниже) в строку:
myAttachment = Новое вложение (вложение ) (в утверждении «Для каждого»)
Public Sub ForwardMessage(
ByVal msgPOP As OpenPop.Mime.Message,
toAddress As String,
fromAddress As String,
subject As String,
body As String
)
Dim smtpServer As New System.Net.Mail.SmtpClient(Me.serverName)
Dim msgSMTP As New MailMessage()
msgSMTP.Sender = New MailAddress(fromAddress)
msgSMTP.To.Add(New MailAddress(toAddress))
msgSMTP.Subject = subject
msgSMTP.Body = body
msgSMTP.IsBodyHtml = True
Dim attachments As Object
attachments = AddAttachments(msgPOP, msgSMTP)
msgSMTP.Attachments.Add(New Attachment(attachments))
smtpServer.Send(msgSMTP)
End Sub
Я, наконец, понял это с помощью друга. Приведенная ниже функция AddAttachments была отредактирована, чтобы показать исправление.
Public Function AddAttachments(
ByVal msgPOP As OpenPop.Mime.Message,
ByVal msgSMTP As MailMessage
) As MailMessage
Dim attachments As Object = msgPOP.FindAllAttachments()
Dim myAttachment As Attachment = Nothing
For Each attachment As OpenPop.Mime.MessagePart In attachments
Dim sName As String = attachment.FileName
Dim sContentType As String = attachment.ContentType.MediaType
Dim stream As MemoryStream = New MemoryStream(attachment.Body)
myAttachment = New Attachment(stream, sName, sContentType)
msgSMTP.Attachments.Add(myAttachment)
Next
Return msgSMTP
End Function
Я потратил часы на изучение этой проблемы и пока не нашел ни одного решения. Я попытался изменить тип данных application на String и OpenPOP.MIME.MessagePart , но безрезультатно. Я попытался добавить «ToString» в переменную attachment и получил следующую ошибку:
System.InvalidCaseException: оператор '&' не определен для типа 'MessagePart' и строка ".ToString".
Я читал на MIME, чтобы посмотреть, если это предложит некоторые идеи, хотя я не смог соединить точки . Я предполагаю, что это возможно, и надеюсь, что кто-то сможет поделиться решением, и я буду счастлив с VB. NET или C#. NET.
Заранее большое спасибо и я ценю ваше время.