Пересылка вложений OpenPOP в SMTP (System. Net .Mail) - PullRequest
1 голос
/ 18 марта 2020

У меня есть приложение, которое я построил в 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.

Заранее большое спасибо и я ценю ваше время.

1 Ответ

0 голосов
/ 30 марта 2020

Решение в отредактированной функции AddAttachments в моем оригинальном посте выше.

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