поэтому я пытаюсь отправить простейшее электронное письмо с помощью powershell. Мне удалось найти довольно хорошие примеры, и я попытался реализовать один из них. Однако запуск powershell возвращает ошибку:
https://i.imgur.com/wfqk4Pf.png
Я обнаружил (https://stackoverflow.com/a/39407785/8607147), что ошибка может быть в строках импорта, но безрезультатно. Все та же ошибка.
Мой код:
param
(
[String] [Parameter(Mandatory = $true)] $from,
[String] [Parameter(Mandatory = $true)] $to,
[String] [Parameter(Mandatory = $true)] $subject,
[String] [Parameter(Mandatory = $false)] $body
)
function sendMail{
# Import the Task.Common and Task.Internal dll that has all the cmdlets we need for Build
$agentWorkerModulesPath = "$($env:AGENT_HOMEDIRECTORY)\agent\worker\Modules"
$agentDistributedTaskInternalModulePath = "$agentWorkerModulesPath\Microsoft.TeamFoundation.DistributedTask.Task.Internal\Microsoft.TeamFoundation.DistributedTask.Task.Internal.dll"
$agentDistributedTaskCommonModulePath = "$agentWorkerModulesPath\Microsoft.TeamFoundation.DistributedTask.Task.Common\Microsoft.TeamFoundation.DistributedTask.Task.Common.dll"
Write-Host "Importing VSTS Module $agentDistributedTaskInternalModulePath"
Import-Module $agentDistributedTaskInternalModulePath
Write-Host "Importing VSTS Module $agentDistributedTaskCommonModulePath"
Import-Module $agentDistributedTaskCommonModulePath
$smtpserver = Get-TaskVariable $distributedTaskContext "smtpserver"
$port = Get-TaskVariable $distributedTaskContext "port"
$username = Get-TaskVariable $distributedTaskContext "username"
$password = Get-TaskVariable $distributedTaskContext "password"
$enableSSL = Get-TaskVariable $distributedTaskContext "enableSSL"
Write-Host (Get-LocalizedString -Key 'smtpserver: {0}...' -ArgumentList $smtpServer)
Write-Host (Get-LocalizedString -Key 'port: {0}...' -ArgumentList $port)
Write-Host (Get-LocalizedString -Key 'username: {0}...' -ArgumentList $username)
Write-Host (Get-LocalizedString -Key 'password: {0}...' -ArgumentList $password)
Write-Host (Get-LocalizedString -Key 'enableSSL: {0}...' -ArgumentList $enableSSL)
#Creating a Mail object
$msg = new-object Net.Mail.MailMessage
#Creating SMTP server object
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$smtp.EnableSSL = $enableSSL
#Email structure
$msg.From = $from
$msg.ReplyTo = $from
ForEach($toe in $to.Split(','))
{
$msg.To.Add($toe.Trim())
Write-Host (Get-LocalizedString -Key 'To: {0}...' -ArgumentList $toe)
}
$msg.subject = $subject
$msg.body = $body
if (![string]::IsNullOrEmpty($username) -and ![string]::IsNullOrEmpty($password))
{
$smtp.Credentials = New-Object System.Net.NetworkCredential($username, $password);
Write-Host 'Credentials used'
}
#Sending email
$smtp.Send($msg)
Write-Host 'Email Sent!'
if ($attFiles.Count -gt 0)
{
Write-Host 'Disposing Mail Attachments'
ForEach($att in $attFiles)
{
$att.Dispose()
}
}
$smtp.Dispose()
}
Try
{
sendMail
}
Catch
{
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
$reply = Read-Host "$ErrorMessage .Please type EXIT to exit"
if ($reply -eq "EXIT") { exit; }
Break
}
Должен ли я установить какой-то модуль? Может быть, в коде есть ошибка? Я довольно новичок в PowerShell, поэтому любая помощь приветствуется.