任務是將多個項目從一個文件夾移動到另一個而不使用任何循環(基本上一次移動1個項目,然後重複該過程一次又一次)。事實上,我在談論C#等同於在Outlook中選擇文件夾中的多個項目並將它們移動到別處。有沒有辦法做到這一點,或者我堅持循環嗎?提前致謝。移動Outlook文件夾之間的多個項目 - C#
回答
雖然偶爾會很高興能夠一次移動一堆消息,但簡單的答案是你不能。
EWS API不提供一次性移動消息列表的方法,只提供將單個消息移動到不同文件夾的方法。因此,您一直在循環瀏覽消息並逐個移動它們。
,順便說一下,是Outlook如何,似乎做...所以在這方面你至少滿足這一要求:)
顯然,Outlook使用一些其他算法而不是簡單的循環。如果你通過100個消息循環來刪除它們,通過item.Delete(),它需要大約10到15秒來遍歷所有的消息。如果您在收件箱中選擇100封郵件並按下「刪除」 - 他們幾乎立即轉到「已刪除郵件」。這是使命 - 實現類似的表現。 – Onewinged
@Onewinged如果您一次刪除幾千條條目,則需要花時間遍歷它們。它做得相當快,但並非瞬間。如果運行速度更快,那可能是因爲微軟擁有Outlook使用的封閉API。這些年來,他們已經將各種類似的東西加入到他們的系統中,所以我發現Outlook有與Exchange交流的方式,沒有其他人可以使用。 – Corey
我認爲你需要一個循環像的foreach,而遍歷所選郵件項目的集合。
Outlook對象模型不提供任何方法一次移動多個項目。使用MailItem類的Move方法移動循環中的項目。
在擴展MAPI級別(僅限C++或Delphi)上,IMAPIFolder::CopyMessages(MESSAGE_MOVE)獲取條目標識列表,因此允許在單個調用中移動或複製多個消息。
但是,Outlook對象模型只允許一次複製或移動一條消息。如果使用Redemption(任何語言)是一個選項,它會暴露RDOFolder.Items.MoveMultiple/CopyMultiple
方法,其中包含「;」或CR/LF分隔的條目ID或條目ID或項目的數組。
是的,您可以使用EWS API移動項目而不使用循環。這裏使用的do while
循環是循環瀏覽頁面,因爲ItemView
的頁面大小爲100.您可以根據需要更改此邏輯。但是我還沒有穿過findResults
這是一組電子郵件。
這裏我假設文件夾'Test'位於根文件夾下。如果該文件夾是收件箱下的子文件夾,請將其更改爲WellKnownFolderName.Inbox
List<SearchFilter> searchFilterCollection = new List<SearchFilter>();
searchFilterCollection.Add(new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchFilterCollection);
ItemView view = new ItemView(100);
view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject);
view.Traversal = ItemTraversal.Shallow;
FindItemsResults<Item> findResults;
do
{
findResults = service.FindItems(new FolderId(WellKnownFolderName.Inbox, new Mailbox(user)), searchFilter, view);
var itemIds = from item in findResults
select item.Id;
service.MoveItems(itemIds,
(Folder.Bind(service, WellKnownFolderName.MsgFolderRoot)
.FindFolders(new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Test"), new FolderView(1))
.FirstOrDefault(x => x.DisplayName == "Test")).Id);
view.Offset = Convert.ToInt32(findResults.NextPageOffset);
} while (findResults.MoreAvailable);
- 1. 在TFS2012項目之間移動文件夾
- 2. 在文件夾之間移動文件
- 3. 在SharePoint 2010列表中的文件夾之間移動項目
- 4. Outlook vba計數日期之間的文件夾項目
- 5. Visual Basic移動Outlook將項目發送到其他文件夾
- 6. 在多個ListBox控件之間移動項目
- 7. Outlook VBA:將新的(未保存的)項目移至文件夾
- 8. 聽多個項目被拖入文件夾 - Outlook中
- 9. 將文件從多個文件夾移動到一個目標文件夾
- 10. VBA,MS Outlook,文件夾項目
- 11. VSTO Outlook加載項向上和向下移動文件夾
- 12. 將郵件項目從一個文件夾移動到另一個文件夾
- 13. 移動MVC的bin文件夾C#項目
- 14. 項目之間的C++頭文件
- 15. C#Outlook;創建文件夾後無法移動電子郵件
- 16. 將SVN控制的項目向上移動一個文件夾
- 17. 當項目移動到Outlook中的文件夾時設置自定義值
- 18. 基於ReceivedTime將項目移動到Outlook中的指定子文件夾
- 19. Outlook規則將所有日曆相關項目移動到特定文件夾
- 20. Android項目,代碼在移動項目文件夾期間被刪除
- 21. Eclipse C++項目文件夾
- 22. Outlook 2007多選文件夾
- 23. Sitecore的C# - 在同一文件夾向上/向下移動一個項目
- 24. Powershell在文件夾之間移動文件
- 25. Python在不同文件夾之間移動文件
- 26. Objective-C的移動陣列(內存管理)之間的項目
- 27. 在列表框之間移動項目
- 28. 在列表框之間移動項目
- 29. 的iOS:UI思路移動多層次tableViews之間的項目
- 30. 移動角度項目到另一個文件夾給我erorr
這是源於某種測試嗎? – kayess