Как отправить письмо с помощью MailKit через PowerShell? - PullRequest
0 голосов
/ 04 марта 2020

У меня проблемы с созданием объекта Message с помощью mailkit, поэтому я могу добавить From, To, Subject и body с сообщением, которое может иметь вложения для отправки перед отключением. Я создал объект MailKit, объект токена отмены. Я могу загрузить dll MailKit и MimeKit, используя add-type -path, и я могу подключаться, проверять подлинность, отключать и удалять, но мне нужна помощь в создании и отправке объекта сообщения. У меня есть следующее:

    $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. Это сработало на моей машине разработчика, но при его запуске в производство выдается следующая ошибка:

Ошибка вызова метода, поскольку [MimeKit.MimeMessage] не содержит метод с именем 'new'

Когда он пытается go передать следующую строку:

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

Размещение точки останова на этой строке после загрузки dll с помощью add-type и запуска "[MimeKit.MimeMessage] | Get-Member - Stati c "в командной строке powershell на сервере разработки и производства показывает следующее:

Development Development machine showing the New Static Method

Production Production server showing no New Static Method

Одна и та же DLL загружена как в разработку, так и в производство. Я загрузил DLL, используя как Add-Type, так и System.Reflection.Assembly. Производство ведется на PowerShell 4.0, а мой блок разработки - на PowerShell 5.1. Не знаю, в этом ли проблема. У кого-нибудь есть идеи?

1 Ответ

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

Обновлен наш действующий сервер до WIndows Management Framework 5.1 (PowerShell), и теперь у него есть новый метод при просмотре Stati c Get-Member.

...