У меня есть каталог, полный файлов электронной почты, которые я хочу импортировать в Outlook.Импорт файлов электронной почты в Outlook программно
Эти файлы должны быть, AFAIK, в формате RFC822. Открытие их Notepad ++ показывает следующее и более открытым текстом
Return-Path: XXX
Received: XXX
Authentication-Results: XXX
X-Message-Status: XXX
X-SID-PRA: XXX
X-SID-Result: XXX
X-AUTH-Result: XXX
X-Message-Delivery: XXX
X-Message-Info: XXXX
Received: from XXX
Received: from XXX
DomainKey-Signature: XXX
Так что я предполагаю, что они находятся в простом старом формате. Теперь я хотел бы импортировать их в PST-файл, чтобы индексировать и сделать их исправными. У меня очень плохое знание Outlook Interop.
Переименование файлов без названия в .eml
работает, я могу открыть их с помощью Outlook 2010. Перетаскивание их в окна Outlook работает наполовину: электронные письма не просматриваются, но я могу их дважды щелкнуть. Не все электронные письма импортируются (я говорю о 3000 + сообщениях), а Outlook не содержит поврежденных файлов, поэтому либо все, либо ничего.
Я изучал внешний вид Outlook.
Основная идея заключается в следующем: для каждого текстового файла импортируйте его как электронную почту в заданную папку.
Я пробовал писать, но еще не проверить, следующий код
Application outlook = GetApplicationObject();
outlook.Session.AddStore(pstPath);
Store theStore = outlook.Session.Stores.Cast<Store>().FirstOrDefault(store => store.FilePath == pstPath);
if (theStore == null) throw new Exception();
try
{
string[] files = Directory.GetFiles(dataDirectory, "*", SearchOption.AllDirectories);
Folder folder = (Folder)theStore.GetRootFolder();
foreach (string file in files.Where(file => file.EndsWith(".eml")))
{
//What?
}
}
finally
{
//Dispose??
}
Где GetApplicationObject
скопировано с другого SO ответа.
Вопрос: возможно ли создать MailItem
на основе содержимого файла? Или мне нужно использовать электронную почту, а затем создать поле MailItem по полю? Как Далее я писал ...
IMail mail = builder.CreateFromEmlFile(file);
MailItem outlookMail = outlook.CreateItem(OlItemType.olMailItem);
outlookMail.Body = mail.GetBodyAsText();
outlookMail.CC = string.Join("; ", mail.Cc.Select(x => x.Render()));
outlookMail.HTMLBody = mail.GetBodyAsHtml();
if (MimeImportance.High.Equals(mail.Importance))
outlookMail.Importance = OlImportance.olImportanceHigh;
else if (MimeImportance.Low.Equals(mail.Importance))
outlookMail.Importance = OlImportance.olImportanceLow;
else
outlookMail.Importance = OlImportance.olImportanceNormal;
outlookMail.Sender=outlook.CreateItem()
библиотека Я пытаюсь от http://www.limilabs.com/mail
Нет такой вещи, как «Outlook 2012». Там 2010 (ПК), 2011 (Mac) и 2013 (ПК). Можете ли вы проверить версию, которую используете? – Charles
Извините. Я имел в виду Office 2010 –