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

如何通过PowerShell使用MailKit发送电子邮件?,powershell,powershell-2.0,powershell-3.0,powershell-4.0,Powershell,Powershell 2.0,Powershell 3.0,Powershell 4.0,我在使用mailkit创建邮件对象时遇到困难,因此我可以添加发件人、收件人、主题和正文,其中可能包含要在断开连接之前发送的附件。我已经创建了MailKit对象,取消令牌对象。我能够使用add type-path加载MailKit和MimeKit DLL,并且我能够连接、验证、断开连接和处置,但是消息对象创建部分和发送部分是我需要帮助的地方。我有以下资料: $MkSmtp = New-Object MailKit.Net.smtp.SmtpClient $CanToken = Ne

我在使用mailkit创建邮件对象时遇到困难,因此我可以添加发件人、收件人、主题和正文,其中可能包含要在断开连接之前发送的附件。我已经创建了MailKit对象,取消令牌对象。我能够使用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
从哪里来的。这在我的开发人员机器上起作用,但将其投入生产会产生以下错误:

方法调用失败,因为[MimeKit.MimeMessage]不包含名为“new”的方法

当它试图通过以下行时:

$Message = [Mimekit.MimeMessage]::new()
通过add type加载dll并在开发和生产服务器上的powershell命令行上运行“[MimeKit.MimeMessage]| Get Member-Static”后,在此行放置断点,显示以下内容:

    $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()
发展

生产


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

将我们的live server更新为WIndows Management Framework 5.1(PowerShell),现在在查看静态Get成员时使用了新方法。

没有人遇到或看到过此类问题吗?仍然有困难。
$Message = New-Object Mimekit.MimeMessage