使用MailKit复制邮件时遇ArgumentNullException问题求助
解决MailKit复制邮件时的ArgumentNullException问题
问题出在sourceInbox.SearchAsync(SearchOptions.All, null)这行代码——MailKit的SearchAsync方法不允许第二个参数(搜索查询)为null,必须传入有效的SearchQuery对象。
修改后的完整代码
var sourceInbox = sourceClient.Inbox; await sourceInbox.OpenAsync(FolderAccess.ReadOnly); var destinationInbox = destinationClient.Inbox; await destinationInbox.OpenAsync(FolderAccess.ReadWrite); Console.WriteLine("Znaleziono folder INBOX na serwerze źródłowym."); Console.WriteLine("Znaleziono folder INBOX na serwerze docelowym."); // 获取源INBOX中所有邮件的UID集合 var uids = await sourceInbox.SearchAsync(SearchOptions.All, SearchQuery.All); foreach (var uid in uids.UniqueIds) { var sourceMessage = await sourceInbox.GetMessageAsync(uid); await destinationInbox.AppendAsync(sourceMessage); } Console.WriteLine("Skopiowano wiadomości z folderu INBOX."); await sourceClient.DisconnectAsync(true); await destinationClient.DisconnectAsync(true); }
关键修改说明
- 替换空参数:将
SearchAsync的第二个参数从null改为SearchQuery.All,这是MailKit内置的查询条件,用于匹配文件夹内所有邮件,符合方法的参数要求,避免空引用异常。 - 清理冗余代码:原代码重复了两次断开客户端连接和输出提示的逻辑,删除重复部分,避免执行冗余操作,保证代码逻辑简洁。
内容的提问来源于stack exchange,提问作者Tomasz Myszak
相关产品推荐
相关产品推荐

