使用 Powershell 设置 Mailkit 中看到的消息

问题描述 投票:0回答:1

我正在尝试在 PS 中编写一个脚本来通过 imap 获取所有未见过/未读的消息并将它们导入到 SQL-DB 中。导入后,我想将消息设置为所见并将其移动到子文件夹中。一切正常,除了我不知道如何将消息设置为已读。

我尝试过

$Inbox_Folder.AddFlags($UID,([MailKit.MessageFlags]::Seen))
但我收到错误:[MimeKit.MimeMessage] 不包含名为“AddFlags”的方法。

经过一番搜索,我发现 Add/Remove/SetFlags 被 Store 取代了。所以我做了一个

$Inbox_Folder.Store($UID,[MailKit.MessageFlags]::Seen)
这给我带来了这个错误:“Store”和参数计数发现多个不明确的重载:“2”。 经过更多挖掘后,我意识到我需要一个 IStoreFlagsRequest。但我根本不知道如何在 PS 中写出这一行。任何帮助将不胜感激。

下面是我的脚本

 Add-Type -Path "$PSScriptRoot\MailKit.dll"
 Add-Type -Path "$PSScriptRoot\MimeKit.dll"
 $Mail_Server = '***'
 $Mail_Port = '***'
 $Mail_Username = '***'
 $Mail_Password = '***'
 $Imap_Client = New-Object MailKit.Net.Imap.ImapClient
 $Imap_Client.Connect($Mail_Server,$Mail_Port)
 $Imap_Client.Authenticate($Mail_Username,$Mail_Password)
 $Imap_Client.Inbox.Open([MailKit.FolderAccess]::ReadWrite) | Out-Null
 $Root_Folder = $Imap_Client.GetFolder($Imap_Client.PersonalNamespaces[0])
 $Inbox_Folder = $Root_Folder.GetSubfolder("INBOX")
 $Archive_Folder = $Inbox_Folder.GetSubfolder("Archiv")
 $Mail_UIDs = $Imap_Client.Inbox.Search([MailKit.Search.SearchQuery]::AND([MailKit.Search.SearchQuery]::NotSeen,[MailKit.Search.SearchQuery]::New))
 if($Mail_UIDs.Count -gt 0)
  {
  ForEach($UID in $Mail_UIDs.GetEnumerator())
   {
   #do stuff
   $Inbox_Folder.AddFlags($UID,([MailKit.MessageFlags]::Seen)) #not working
   $Imap_Client.Inbox.MoveTo($UID,$Archive_Folder) | Out-Null #works
   }
  }
$Imap_Client.Disconnect($true)
 
powershell mailkit
1个回答
0
投票

正如您所说,MailKit 最近发生了变化,您会发现的大多数示例都引用旧的(现已删除)

.addflags
方法。

您对 store 是正确的接口的看法是正确的,但您仍然尝试像旧方法一样使用它,而它需要

StoreFlagRequest
传递
StoreAction
MessageFlag
:

$Inbox_Folder.Store($UID, [MailKit.StoreFlagsRequest]::new([MailKit.StoreAction]::Add,[MailKit.MessageFlags]::Seen))

或者,(因为 Powershell 无论如何都会尝试将字符串转换为正确的类型),以更简单的方式:

$Inbox_Folder.Store($UID, [MailKit.StoreFlagsRequest]::new("Add","Seen"))
© www.soinside.com 2019 - 2024. All rights reserved.