Я пытаюсь отправить электронные письма из приложения .NET с помощью объектной модели Outlook.Электронная почта, отправленная с объектной моделью Outlook, остается в папке «Исходящие», пока я не запустил Outlook
Мое приложение отображает окно сообщения Outlook, чтобы пользователь мог видеть, что мы отправляем, и сначала его редактировать. Когда пользователь нажимает кнопку «Отправить», окно Outlook закрывается, и сообщение отправляется. Это работает отлично, пока приложение Outlook уже запущено.
Если приложение Outlook еще не запущено, сообщение застревает в папке «Исходящие» и не отправляется до запуска Outlook. Когда я запускаю Outlook, я могу увидеть сообщение, сидящее в папке «Исходящие» в течение нескольких секунд, затем оно отправляется.
Вот упрощенная версия коды, я использую для отправки электронной почты:
Outlook.Application app = new Outlook.Application();
var ns = app.GetNamespace("MAPI");
// (ref: https://msdn.microsoft.com/en-us/library/office/ff861594.aspx)
// If outlook is already running, this does nothing. If it isn't, this has the
// side-effect of initializing MAPI to use the default profile and make the object
// model fully functional
var mailFolder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
var mailItem = (Outlook.MailItem)ns.Application.CreateItem(Outlook.OlItemType.olMailItem);
mailItem.To = "[email protected]";
mailItem.Subject = "This is a test";
mailItem.HTMLBody = "<html>A bunch of HTML</html>";
mailItem.Display(true);
Примечание: Если я заменяю вызов mailItem.Display()
с mailItem.Send()
, работает ли перспектива работает или нет. К сожалению, это не вариант, потому что мне нужно, чтобы пользователь мог редактировать сообщение перед его отправкой.
Я думаю, мне нужно найти способ, когда сообщение закончит отправку, и сохранить объект до тех пор ... но я не уверен, как это сделать. Мое приложение - это консольное приложение, которое необходимо выполнить после отправки электронной почты. Надевание нити на некоторое время не делает этого (возможно, потому, что все, что я ожидаю, происходит в этом же потоке).
Ожидание события SyncEnd, похоже, делает трюк. –