Преобразование файлов.MSG в.TXT; Должен ли я использовать Microsoft.Interop Outlook?
Я пытаюсь сделать преобразование из.msg файлов в.txt. У меня два вопроса.
1) Я исследовал и нашел пакет Microsoft.Interop Outlook, и есть способ, которым я могу извлечь bodyHTML, To, Sent Date и некоторые другие свойства, но я чувствую, что это очень ручной процесс, потому что я должны обрезать все HTML-теги, такие как
,, href и т. д.
Вот мой текущий код...
MailItem mailItem = outlookApp.Session.OpenSharedItem(item) as MailItem;
TextFile textFile = new TextFile(); //collection of properties I am interested in
textFile.To = mailItem.To;
textFile.Subject = mailItem.Subject;
textFile.Sent = mailItem.SentOn.ToString();
textFile.Name = Path.GetFileNameWithoutExtension(item);
var atttach = mailItem.Attachments; //Really just want the names
textFile.Body = RemoveStuff(mailItem.HTMLBody); //manually removing all html tags
textFiles.Add(textFile);
Marshal.ReleaseComObject(mailItem);
Кто-нибудь знает, есть ли более эффективный способ сделать это в C# или способ использования Interop, о котором я не знаю?
2) Если я иду по маршруту взаимодействия, есть ли способ обойти всплывающее окно в Outlook, спрашивающее, могу ли я разрешить доступ к Outlook? Кажется неэффективным, если моя цель - создать конвертер.
Любая помощь с благодарностью.
Спасибо!
1 ответ
Во-первых, почему вы используете свойство HTMLBody вместо обычного текста Body?
Во-вторых, вы можете использовать MailItem.saveAs(..., olTxt), чтобы сохранить сообщение в виде текстового файла. Или вы подразумеваете что-то еще под txt файлом?
Outlook выдает запрос безопасности, если ваше антивирусное приложение не обновлено. Если вы не можете управлять средой, в которой выполняется ваш код, Extended MAPi (только C++ или Delphi) или обертка, такая как Redemption (любой язык), в значительной степени является единственным вариантом. См. http://www.outlookcode.com/article.aspx?id=52 для получения дополнительной информации.
В Redemption у вас может быть что-то вроде следующего:
using Redemption;
...
RDOSession session = new RDOSession();
RDOMail msg = session.GetMessageFromMsgFile(TheFileName);
msg.SaveAs(TxtFileName, rdoSaveAsType.olTXT);