2016-08-11 7 views
1

Я пытаюсь разобрать MIME-сообщения из заметок Lotus с помощью .NET Domino interop. Когда электронные письма не находятся в формате MIME, мне удалось получить контент Body через простой пункт NotesDocument.GetFirstItem("Body").Text;. Однако с MIME я получаю пустую или пустую строку, когда пытаюсь разобрать содержимое тела.Parse MIME email from Lotus Notes

var session = new NotesSession(); 
session.Initialize("RadioLotus028"); 
session.ConvertMime = false; 
var db = session.GetDatabase("PRGLNApps01/CZ/RFERL", "mail-in\\SEEurope\\MIA.nsf", false); 
if (db == null) throw new ArgumentNullException("cannot load database"); 

var legnth = db.AllDocuments.Count; 
for (int i = 1; i < legnth; i++) 
{ 
    NotesDocument doc = db.AllDocuments.GetNthDocument(i); 
    NotesMIMEEntity bodyMIME = doc.GetMIMEEntity(); 

    NotesStream stream = session.CreateStream(); 
    //bodyMIME.GetContentAsBytes(stream); 
    //bodyMIME.GetEntityAsText(stream); 
    bodyMIME.GetContentAsText(stream); 

    string bodyString = stream.ReadText(); 
    var bodyString2 = stream.Read(); 
    string bodyString3 = bodyMIME.ContentAsText; 

    var from = doc.GetFirstItem("From").Text; 
    var subject = doc.GetFirstItem("Subject").Text;     
} 

Есть ли у кого-нибудь опыт работы с этой проблемой? Или как получить содержимое тела как HTML или RichfullText или любым другим способом?

+0

Вы не проверяете, содержит ли сообщение MIME или богатый текст в теле. Вы уверены, что сообщение, которое вы обрабатываете в этом почтовом ящике, все MIME? Вероятно, вы должны использовать doc.hasItem («$ NoteHasNativeMIME») для проверки. –

+0

Вы правы! Это всего лишь пример кода. Окончательная версия содержит переключатель между типами содержимого. Так что разные ветви позаботятся о RichText, а другой - о MIME-корпусе. :) спасибо за комментарий, это сэкономит некоторое время кому-то. – Mastenka

ответ

3

Вам, скорее всего, необходимо найти дочерние объекты MIME. Следующая логика Java должна помочь вам в правильном направлении:

MIMEEntity mime = sourceDoc.getMIMEEntity(bodyField); 
if (mime != null) { 
    // If multipart MIME entity 
    if (mime.getContentType().equals("multipart")) { 
     // Find text/html content of each child entity 
     MIMEEntity child1 = mime.getFirstChildEntity(); 
     while (child1 != null) { 
      if (child1.getContentType().contains("text")) { 
       html = child1.getContentAsText(); 
      } 
      MIMEEntity child2 = child1.getFirstChildEntity(); 
      if (child2 == null) { 
       child2 = child1.getNextSibling(); 
       if (child2 == null) { 
        child2 = child1.getParentEntity(); 
        if (child2 != null) { 
         child2 = child2.getNextSibling(); 
        } 
       } 
      } 
      child1 = child2; 
     } 
    } else { 
     // Not multipart 
     html = mime.getContentAsText(); 
    } 
} 
+1

Спасибо, ваше решение правильное ... Я все время отсутствовал! :( – Mastenka

 Смежные вопросы

  • Нет связанных вопросов^_^