2017-01-05 1 views
0

Microsoft Visual Studio 2015로 작업 중이며 목록 양식에서 문자열 형식으로 변환하려고합니다. 비슷한 문제에 대한 몇 가지 해결책을 찾았지만 특히이 문제는 아닙니다. 내가 좋아하는 것전자 메일 첨부 파일의 텍스트 가져 오기 및 파일에 쓰기

결국이 코드가 작동해야합니다 :

Dim info As Byte() = New UTF8Encoding(True).GetBytes(Utilities.GetEmailInfo(msg.Message).Attachments) 

내 최종 게임은 첨부 파일에서 텍스트를 받아 파일에 기록하는 것입니다. 아래에 나열된 ToData와 같은 다른 데이터 형식을 사용하면 파일이 제대로 표시되지만 GetBytes가 목록에서 텍스트를 가져올 수 없기 때문에 위 코드에서 오류가 발생합니다. 목록에서 텍스트를 가져 오는 데 사용할 수있는 다른 함수가 있습니까?

Public Class EmailInfo 
    Public FromData As String = vbNullString       'FROM: 
    Public ToData As String = vbNullString        'TO: 
    Public DateData As String = vbNullString       'DATE: 
    Public SubjectData As String = vbNullString       'SUBJECT: 
    Public MessageBody As EmailItem          'contents of message body 
    Public AlternateViews As New Collections.Generic.List(Of EmailItem) 'list of alternate views 
    Public Attachments As New Collections.Generic.List(Of EmailItem) 'list of attachments 
End Class 

내가 EmailInfo.Attachments이다 액세스 할 자원 :

I 변환 할 필요가있는 클래스에는 다음이 포함되어 있습니다. 이 자원은 EmailItem 유형의 목록으로 저장됩니다. 다음과 같이 유형에 대한 코드는 다음과 같습니다 나는 그런 String.Join 같은 일부 코드를 사용하여 시도하지만 빈 문자열로 끝날

Public Class EmailItem 
    Public ContentType As String = vbNullString   'CONTENT-TYPE data 
    Public ContentTypeData As String = vbNullString  'filename or text encoding 
    Public ContentTypeDataIsFilename As Boolean = False 'True if ContentTypeData specifies a filename 
    Public ContentEncoding As String = vbNullString  'CONTENT-TRANSFER-ENCODING data 
    Public ContentBody As String = vbNullString   'raw data of block 
End Class 

.

나는 VB에 익숙하지 않기 때문에 제발 용서해주십시오.

도움 주셔서 감사합니다.

Ryan

+1

'첨부 파일'은 모음이므로 바이트 묶음으로 쓰려고하므로 하나의 항목을 알 수있는 방법을 제공하지 않습니다. 끝나고 또 시작됩니다. 그것은 단지 방울이 될 것입니다. * 어쩌면 * 당신이 그것을 직렬화하기를 원합니까? – Plutonix

+0

Ryan 각 루프'File.AppendAllText'는 전자 메일 및 첨부 파일 정보를 제공하므로 한 항목이 끝나고 다른 항목이 시작되는 위치를 알 수 있습니다.나는 개인적으로 텍스트 파일 대신 데이터베이스를 사용할 것이고, 텍스트 파일은 매우 커질 것이며 한 번 5MB가 넘으면 열릴 나이가들 것이다. –

+0

@Plutonix, 그것을 직렬화 해 주셔서 감사합니다. 완벽하게 작동했습니다. 나는 내가 있어야 할 곳을 얻는 길에 잘 다닙니다. 누군가 IM 클라이언트와 비슷하게 표시되는 전자 메일 클라이언트를 설계하고 있다고 생각하는 경우 – user6086585

답변

0

이 작업은 간단하지 않습니다. 첨부 파일은 독점적 인 형식 (".pdf", ".doc", ".xls", ".ppt", ".csv", ".vsd", ".zip", ".rar" ".txt", ".html", ".proj"등 기타 등

좋은 소식은 모든 작업이 이미 완료되었으며 거의 ​​모든 파일을 일반적으로 읽는 방법을 보여줍니다. 형식이 답변에서 텍스트를 추출 :

Generically read any file format and convert it to .txt format

당신이 단락을 설정하는 정보를 읽을 수 있는지 확인합니다.

그럼 TikaOnDotnet & TikaOnDotnet.TextExtractor를 NuGet (도구 메뉴> NuGet Package Manager)을 사용하여 프로젝트에 참조하십시오.

내가 사용하여, 당신은 이메일 첨부 파일을 추출하는 코드를 작성했습니다 가정하고는 Outlook 추가 기능 MSDN How to: Programmatically Save Attachments from Outlook E-Mail Items 또는 Interop를 통해 Outlook을 사용 just an app, 예를 들면 :

private TextExtractor _textExtractor; 
private string _attachmentTextFilepath = @"c:\temp\EmailAttachmentText.txt"; 
static void IterateMessages(Outlook.Folder folder) 
{ 
    var fi = folder.Items; 
    if (fi != null) 
    { 
     foreach (Object item in fi) 
     { 
      Outlook.MailItem mi = (Outlook.MailItem)item; 
      var attachments = mi.Attachments; 
      if (attachments.Count != 0) 
      { 
       for (int i = 1; i <= mi.Attachments.Count; i++) 
       { 
        //Save email attachments 
        mi.Attachments[i].SaveAsFile(@"C:\temp\" + mi.Attachments[i].FileName); 

        //Use TIKA to read the contents of the file 
        TextExtractionResult textExtractionResult = _textExtractor.Extract(@"C:\temp\" + mi.Attachments[i].FileName); 

        //Save attachment text to a txt file 
        File.AppendAllText(_attachmentTextFilepath, textExtractionResult.Text); 
       } 
      } 
     } 
    } 
} 

VB에서 : C#에서

.Net :

관련 문제