C # сохранить последнюю отправку почты на рабочий стол (как .msg) - PullRequest
1 голос
/ 14 июня 2019

Я пытаюсь сохранить последнюю отправленную почту из Outlook на рабочий стол в формате .msg. Но я получаю ошибку с моим кодом в последней строке моего кода следующим образом:

        ((Microsoft.Office.Interop.Outlook.MailItem)mail).SaveAs(mydesktop+ "\\Myapplication\\" + subject.Replace(":", "").Replace("/", "").Replace("|", "") + ".msg", Microsoft.Office.Interop.Outlook.OlSaveAsType.olMSG);

Ошибка: System.Runtime.InteropServices.COMException: 'Элемент был перемещен или удален.'

      string mailto = labelControl53.Text + ";" + labelControl56.Text ;
        string cc = "myaccount@mymail.com";
        string subject= labelControl7.Text + "-" + comboBoxEdit1.Text + "-" + textEdit6.Text + " Yüklemesi hk.";

        string mydesktop= Environment.GetFolderPath(Environment.SpecialFolder.Desktop);


        Microsoft.Office.Interop.Outlook.Application mailat = new Microsoft.Office.Interop.Outlook.Application();
        Microsoft.Office.Interop.Outlook.MailItem mail = (Microsoft.Office.Interop.Outlook.MailItem)mailat.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
         mail.To = mailto;
        mail.CC = cc;
        mail.Subject = subject;
        mail.Importance = Microsoft.Office.Interop.Outlook.OlImportance.olImportanceHigh;
        mail.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatHTML;
        mail.HTMLBody = getHTMLupload();
        ((Microsoft.Office.Interop.Outlook.MailItem)mail).Send();
        ((Microsoft.Office.Interop.Outlook.MailItem)mail).SaveAs(mydesktop+ "\\Myapplication\\" + subject.Replace(":", "").Replace("/", "").Replace("|", "") + ".msg", Microsoft.Office.Interop.Outlook.OlSaveAsType.olMSG);

System.Runtime.InteropServices.COMException: 'Элемент был перемещен или удален.'

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Этот почтовый объект освобождается после отправки, поэтому у вас нет к нему доступа.Вы, вероятно, должны добавить обработчик событий.Нечто подобное может сработать.

    ((Outlook.ItemEvents_10_Event)mail).Send += new Microsoft.Office.Interop.Outlook.ItemEvents_10_SendEventHandler(SaveSentMail);

    static void SaveSentMail(ref bool Cancel)
    {
       mail.SaveAs(mydesktop+ ....);
    }
0 голосов
/ 14 июня 2019

Если вы хотите сохранить последний отправленный элемент в Outlook, вам нужно обработать событие ItemAdd класса Items, которое приходит из папки Sent Items.Обычно почтовые отправления помещаются в папку Sent Items сразу после отправки.Однако пользователи или другие надстройки могут установить свойство DeleteAfterSubmit , которое устанавливает логическое значение, равное True, если копия почтового сообщения не сохраняется при отправке, и False, если копия сохраняется в *.Папка 1007 * Отправленные .

Или просто вызовите SaveAs перед отправкой элементов в Outlook (перед методом Send).

...