Чтобы окончательно удалить MailItem
вы должны петлю через Items
в папке Deleted
.
Для этого посмотрим на следующий код:
Dim oApp As New Outlook.Application
Dim oMapi As Outlook.NameSpace = oApp.GetNamespace("MAPI")
Dim oFolders As Outlook.Folders = oMapi.Folders
Dim oFolder As Outlook.MAPIFolder = oFolders(oMapi.DefaultStore.DisplayName).Folders("Deleted Items")
Dim oMailItem As Outlook.MailItem = CType(oApp.Session.OpenSharedItem("C:\sometestmail.msg"), Outlook.MailItem)
oMailItem.UserProperties.Add("DeleteMe", Outlook.OlUserPropertyType.olText)
oMailItem.Move(oFolder)
oMailItem = Nothing
For Each item As Outlook.MailItem In oFolder.Items
Dim oProperty As Outlook.UserProperty = item.UserProperties.Find("DeleteMe")
If oProperty IsNot Nothing Then
item.Delete()
End If
Next
Мой код будет отличаться на ваш, как я повернулся Option Strict On. Я предлагаю вам сделать то же самое. Это поможет в долгосрочной перспективе.
Обратите внимание, что я устанавливаю UserProperty
на MailItem
, прежде чем переместить его в папку Deleted
. Это поможет идентифицировать этот единственный MailItem
, который вы хотите удалить навсегда. Если вы хотите навсегда удалить все MailItems
в папке Deleted
то это код, который нужно будет:
Dim oApp As New Outlook.Application
Dim oMapi As Outlook.NameSpace = oApp.GetNamespace("MAPI")
Dim oFolders As Outlook.Folders = oMapi.Folders
Dim oFolder As Outlook.MAPIFolder = oFolders(oMapi.DefaultStore.DisplayName).Folders("Deleted Items")
Dim oMailItem As Outlook.MailItem = CType(oApp.Session.OpenSharedItem("C:\sometestmail.msg"), Outlook.MailItem)
oMailItem.Move(oFolder)
oMailItem = Nothing
For i = oFolder.Items.Count To 1 Step -1
CType(oFolder.Items(i), Outlook.MailItem).Delete()
Next
Для того, чтобы это работало нужно перебрать в Deleted
папку назад. В документации к MSDN в нем указано:
Метод Delete удаляет один элемент в коллекции. Чтобы удалить все элементы в коллекции элементов папки, вы должны удалить каждый элемент, начиная с последнего элемента в папке. Например, в коллекции элементов папки AllItems, если в папке указано n количество элементов, начните удаление элемента на странице AllItems.Item (n), уменьшая индекс каждый раз, пока вы не удалите AllItems.Item (1) ,
Возможно, потому что это то, что удаляет DOES ... Переместите его в удаленную папку. Если ваш прогноз настроен на удаление по закрытию, они должны исчезнуть, когда вы его закроете. В противном случае они останутся там. –
BUt вы можете проверить эту ссылку http://www.vbforums.com/showthread.php?327965-RESOLVED-Permanently-Delete-Outlook-Items –
Или это https://www.experts-exchange.com/questions /27503590/VBA-to-permanently-delete-emails-instead-of-moving-them-to-the-deleted-folder.html –