在 Powershell 中加载 MailKit DLL 作为程序集
Loading MailKit DLL as Assembly in Powershell
我正在尝试使用 MailKit dll 作为 Powershell 中的程序集,但它无法正常工作。
我尝试过使用 add-type 和 [System.Reflection.Assembly] 方法但没有成功。
link 到 mailkit 库:
https://github.com/jstedfast/MailKit
用这个方法:
$path="$HOME\.nuget\packages\mailkit.16.1\lib\net451\MailKit.dll"
[System.Reflection.Assembly]::LoadFile($path)
没有引用内存中的程序集。
使用此方法:
Add-Type -Path $path
这是错误:
- Add-Type -Path $path
- ~~~~~~~~~~~~~~~~~~~~
- CategoryInfo : NotSpecified: (:) [Add-Type], ReflectionTypeLoadException
- FullyQualifiedErrorId : System.Reflection.ReflectionTypeLoadException,Microsoft.PowerShell.Commands.AddTypeCommand
谢谢
丹妮尔
检查路径。对我来说,使用 $MailKitDllPath
:
中的绝对路径就可以了
Add-Type -Path $MailKitDllPath
$client = New-Object MailKit.Net.Smtp.SmtpClient
我发现 MailKit 有对 MimeKit dll 的引用,但是加载没有错误 MailKit.dll,所以有必要也加载 MimeKit.dll。
[System.Reflection.Assembly]::LoadFile("$home\.nuget\packages\MailKit.16.1\lib\net451\MailKit.dll")
[System.Reflection.Assembly]::LoadFile("$home\.nuget\packages\mimekit.16.1\lib\net451\MimeKit.dll")
这个完整的脚本可能会对其他人有所帮助:
# search for "Test" in subject and MoveTo Archive/2018
$packages = split-path -parent $MyInvocation.MyCommand.Definition
add-type -path (Join-Path $packages "MimeKit.dll") | Out-Null
add-type -path (Join-Path $packages "MailKit.dll") | Out-Null
#Server and Mailbox Definitions
$mailserver = "mail.corp.com"
$username = "email@corp.com"
$password = "password"
$cnn = New-Object MailKit.Net.Imap.ImapClient
$cnn.Connect($mailserver)
$cnn.Authenticate($username,$password)
$cnn.Inbox.Open([MailKit.FolderAccess]::ReadWrite)
$query = [MailKit.Search.SearchQuery]::SubjectContains("Test")
#$orderBy = @([MailKit.Search.OrderBy]::Arrival)
#filter
$uids = $cnn.Inbox.Search($query) #$orderby) not working yet
#download
$msgs = $cnn.Inbox.Fetch($uids, [MailKit.MessageSummaryItems]::UniqueId -bor [Mailkit.MessageSummaryItems]::BodyStructure)
#do something
#move
$archive = $cnn.GetFolder("Archive.2018")
$cnn.Inbox.MoveTo($uids, $archive)
$cnn.Disconnect($true)
我正在尝试使用 MailKit dll 作为 Powershell 中的程序集,但它无法正常工作。 我尝试过使用 add-type 和 [System.Reflection.Assembly] 方法但没有成功。 link 到 mailkit 库:
https://github.com/jstedfast/MailKit
用这个方法:
$path="$HOME\.nuget\packages\mailkit.16.1\lib\net451\MailKit.dll"
[System.Reflection.Assembly]::LoadFile($path)
没有引用内存中的程序集。 使用此方法:
Add-Type -Path $path
这是错误:
- Add-Type -Path $path
- ~~~~~~~~~~~~~~~~~~~~
- CategoryInfo : NotSpecified: (:) [Add-Type], ReflectionTypeLoadException
- FullyQualifiedErrorId : System.Reflection.ReflectionTypeLoadException,Microsoft.PowerShell.Commands.AddTypeCommand
谢谢
丹妮尔
检查路径。对我来说,使用 $MailKitDllPath
:
Add-Type -Path $MailKitDllPath
$client = New-Object MailKit.Net.Smtp.SmtpClient
我发现 MailKit 有对 MimeKit dll 的引用,但是加载没有错误 MailKit.dll,所以有必要也加载 MimeKit.dll。
[System.Reflection.Assembly]::LoadFile("$home\.nuget\packages\MailKit.16.1\lib\net451\MailKit.dll")
[System.Reflection.Assembly]::LoadFile("$home\.nuget\packages\mimekit.16.1\lib\net451\MimeKit.dll")
这个完整的脚本可能会对其他人有所帮助:
# search for "Test" in subject and MoveTo Archive/2018
$packages = split-path -parent $MyInvocation.MyCommand.Definition
add-type -path (Join-Path $packages "MimeKit.dll") | Out-Null
add-type -path (Join-Path $packages "MailKit.dll") | Out-Null
#Server and Mailbox Definitions
$mailserver = "mail.corp.com"
$username = "email@corp.com"
$password = "password"
$cnn = New-Object MailKit.Net.Imap.ImapClient
$cnn.Connect($mailserver)
$cnn.Authenticate($username,$password)
$cnn.Inbox.Open([MailKit.FolderAccess]::ReadWrite)
$query = [MailKit.Search.SearchQuery]::SubjectContains("Test")
#$orderBy = @([MailKit.Search.OrderBy]::Arrival)
#filter
$uids = $cnn.Inbox.Search($query) #$orderby) not working yet
#download
$msgs = $cnn.Inbox.Fetch($uids, [MailKit.MessageSummaryItems]::UniqueId -bor [Mailkit.MessageSummaryItems]::BodyStructure)
#do something
#move
$archive = $cnn.GetFolder("Archive.2018")
$cnn.Inbox.MoveTo($uids, $archive)
$cnn.Disconnect($true)