Как сохранить отправленное письмо сразу после отправки?

У меня есть отдельное приложение.Net из Outlook. Я хотел бы использовать Office.Interop (избегать redmeption.dll), чтобы отправить и сохранить отправленное письмо из этого приложения. Но когда я пытаюсь сохранить электронную почту после функции Send(), я получаю исключение: "Элемент был перемещен или удален".

Кажется, Outlook перемещен элемент электронной почты после отправки.

Итак, может ли кто-нибудь предложить мне лучшие способы, как сохранить "Отправленный" элемент электронной почты на диск?

Мне нужно, чтобы сохраненный файл MSG имел статус "отправлено". Таким образом, сохранение события Item_Send не работает для моего случая. Спасибо!

Вот мои коды

     public bool SendAndSavAs(Outlook.Account emailAccount, string toEmailAddress)
    {
        Outlook.MailItem mailItem = null;
        try
        {
            mailItem = OutlookApp.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
            mailItem.Subject = "Test Subject";
            mailItem.BodyFormat = Outlook.OlBodyFormat.olFormatPlain;
            mailItem.Body = "Test Body";

            // Add recipient using display name, alias, or smtp address
            mailItem.Recipients.Add(toEmailAddress);
            mailItem.Recipients.ResolveAll();
            mailItem.SendUsingAccount = emailAccount;

            // send email
            mailItem.Send();

            // save the Sent mail to local disk  (****but have exception occurs ****)
            mailItem.SaveAs(@"c:\temp\test.msg");

            return true;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            ReleaseComObject(mailItem);
        }
    }

2 ответа

Решение

Вам нужно обработать событие ItemAdd на Sent Items папка. В обработчике событий вы можете вызвать SaveAs метод.

Также вы можете рассмотреть возможность использования свойства SaveSentMessageFolder класса MailItem, которое позволяет установить объект Folder, представляющий папку, в которую будет сохранена копия сообщения электронной почты после отправки.

После того, как вы позвоните "Отправить", единственное, что вы можете сделать с этим сообщением, - отпустить ссылку на него - теперь оно принадлежит поставщику транспортных услуг.

Также обратите внимание, что Send является асинхронным - сообщение отправляется, а его свойства, связанные с отправителем, заполняются только после его отправки. Первый шанс получить доступ к сообщению в этом состоянии - это когда Items.ItemAdd событие запускает папку "Отправленные".

Другие вопросы по тегам