Попытка сохранить электронную почту Outlook в папке

У меня есть приложение WinForms, которое одним нажатием кнопки автоматически создает почту Outlook следующим образом:

public static void CreateOutlookEmail(string pFileName, string pCaseFolder, string pEmail, string pSubject, string pMessage)
    {
        try
        {
            Outlook.Application outlookApp = new Outlook.Application();
            Outlook.MailItem mailItem = (Outlook.MailItem)outlookApp.CreateItem(Outlook.OlItemType.olMailItem);                
            mailItem.Subject = pSubject;
            mailItem.To = pEmail;
            mailItem.Body = pMessage;
            mailItem.Importance = Outlook.OlImportance.olImportanceNormal;
            mailItem.Display(false);
            string fileDetails = pCaseFolder + "\\" + pFileName + @".eml";
            mailItem.SaveAs(fileDetails);
        }
        catch (Exception eX)
        {
            throw new Exception("cDocument: Error occurred trying to Create an Outlook Email"
                                + Environment.NewLine + eX.Message);
        }
    }

Код успешно открывает новое электронное письмо Outlook и заполняет его деталями, отправленными в метод, например. адрес электронной почты, тему и текст сообщения.

Также, когда я нахожу папку (отправленную как параметр), я вижу, что документ электронной почты был сохранен.

Проблема в том, что когда я открываю электронное письмо из папки, документ электронной почты полностью пуст, т.е. нет адреса электронной почты, темы или сообщения.

Что я делаю неправильно?


person PJW    schedule 13.12.2012    source источник


Ответы (1)


Ваш код в порядке. Просто используйте расширение «.msg» вместо «.eml». Также формат eml не существует в Outlook.OlSaveAsType.

person stamhaney    schedule 13.12.2012
comment
Готово, и теперь он говорит, что у меня нет разрешения на выполнение этого действия и я вообще не буду сохранять документ? - person PJW; 13.12.2012
comment
Сообщение, вероятно, открыто в Outlook. Вы можете проверить? Также вы можете прокомментировать строку mailItem.Display(false); Я использовал ваш фрагмент и могу сохранить сообщение, так что проблем быть не должно. - person stamhaney; 13.12.2012
comment
Весь смысл этого кода заключается в создании и открытии нового электронного письма, заполнении его основной информацией, например. адрес, тему, а затем автосохранить в обычной папке Windows. Так что да, электронная почта будет открыта в то время, когда приложение попытается сохранить это. - person PJW; 13.12.2012
comment
Ok. Можно ли использовать временное имя файла, чтобы открыть почтовый элемент? Как только вы закончите обработку, вы можете сохранить ее под именем, которое вы предпочитаете. Если сохраненный файл открыт, то в следующий раз записать в него точно не получится, так как он уже открыт. - person stamhaney; 13.12.2012
comment
Мне нужно сохранить его сразу после создания, а не полагаться на то, что пользователь не забудет его сохранить. - person PJW; 13.12.2012
comment
Можете ли вы указать текущий статус? Вы все еще получаете какую-либо ошибку? - person stamhaney; 14.12.2012