MailKit / MimeKit выдает ошибку в PowerShell 4, но работает в PowerShell 5.1 - PullRequest
0 голосов
/ 20 марта 2020

Я получаю сообщение об ошибке «Типы аргументов не совпадают» при попытке отправить электронное письмо с использованием MailKit / MimeKit версии 2.5.1, когда я нахожусь на рабочем сервере, использующем PowerShell 4.0, но работающем на компьютере разработчика с помощью PowerShell 5.1

Системная информация для компьютеров производства и разработки приведена ниже: enter image description here

Я получаю сообщение об ошибке при работе в try / catch после попытки запуска $ MkSmtp. Отправить ($ Сообщение):

enter image description here

Код, который я имею, выглядит следующим образом:

    #Load the .NET Core class dll for Mailkit based on .NET 4.5
    add-type -path "c:\Windows\System32\WindowsPowerShell\v1.0\Modules\EmailUtilities\MailKit.dll"
    add-type -path "c:\Windows\System32\WindowsPowerShell\v1.0\Modules\EmailUtilities\MimeKit.dll"

    #Server and Mailbox properties for less secure access when connecting to google
    $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)
    #have the building of the message in a separate function which also worked
    #on development PowerShell 5.1 but not on production PowerShell 4 but rebuilt message
    #here until I figure it out
    #--------------
    $Message = New-Object MimeKit.MimeMessage
    $Message.From.Add($global:EmailFrom)
    $Message.To.Add($global:EmailTo)
    $Message.Subject = "Test";
    $TextPart = New-Object MimeKit.TextPart ("plain")
    $TextPart.Text = "Testing message..."
    $Message.Body = $TextPart
    #$Options = New-Object MimeKit.Net.Smtp.FormatOptions.Default.Clone
    #$Options.International = $true

    #$Message = New-MimeMessage $global:EmailFrom $global:EmailTo $Subject $LogMsg
    $MkSmtp.Send($Message)
    $MkSmtp.Disconnect($true)
    $MkSmtp.Dispose()
    #--------------

1 Ответ

0 голосов
/ 10 апреля 2020

Обновлен наш действующий сервер до Windows Management Framework 5.1 (PowerShell) и теперь работает, как и ожидалось, так же, как и моя машина для разработки.

...