如何通过 PowerShell 使用 MailKit 发送电子邮件?

How to send email by using MailKit via PowerShell?

我在使用 mailkit 创建 Message 对象时遇到困难,因此我可以在断开连接之前添加发件人、收件人、主题和邮件正文,这些邮件可能包含要发送的附件。我已经创建了 MailKit 对象,Cancelation Token 对象。我能够使用 add-type -path 加载 MailKit 和 MimeKit dll,并且我能够连接、验证、断开连接和处理,但消息对象创建部分和发送是我需要帮助的地方。我有以下内容:

    $MkSmtp = New-Object MailKit.Net.smtp.SmtpClient
    $CanToken = New-Object System.Threading.CancellationToken ($false)
    $SSL = [MailKit.Security.SecureSocketOptions]::SslOnConnect
    $MkSmtp.Connect($MailServer, $Port, $SSL, $CanToken)
    $MkSmtp.Authenticate(([System.Text.Encoding]::UTF8), $Username, $Password, $CanToken)

    #$Message = New-Object ????

    $MkSmtp.Send($Message)
    $MkSmtp.Disconnect($true)
    $MKSmtp.Dispose()

我认为答案是:

    $Message = [Mimekit.MimeMessage]::new()
    $Message.From.Add($From)
    $Message.To.Add($To)
    $Message.Subject = "Test"
    $TextPart = [MimeKit.TextPart]::new("plain")
    $Body = "This is just a test"
    $TextPart.Text = $Body
    $Message.Body = $TextPart

来自 https://www.powershellgallery.com/packages/PSGSuite/2.13.2/Content/Private%5CNew-MimeMessage.ps1。这在我的开发机器上有效,但将其投入生产会产生以下错误:

Method invocation failed because [MimeKit.MimeMessage] does not contain a method named 'new'

当它试图通过以下行时:

$Message = [Mimekit.MimeMessage]::new()

通过 add-type 和 运行 "[MimeKit.MimeMessage] | Get-Member -Static" 在 powershell 命令行上加载 dll 后在此行放置断点开发和生产服务器显示如下:

发展

生产

开发版和生产版都加载了相同的 DLL。我已经使用 Add-Type 和 System.Reflection.Assembly 加载了 DLL。生产是在 PowerShell 4.0 上,而我的开发箱是在 PowerShell 5.1 上。不知道这是否是问题所在。有人有什么想法吗?

将我们的实时服务器更新为 WIndows Management Framework 5.1 (PowerShell),现在在查看静态 Get-Member 时有了新方法。

$Message = New-Object Mimekit.MimeMessage