Используйте PowerShell для отправки электронной почты в Outlook без блокировки, если Outlook уже работает - PullRequest
1 голос
/ 19 февраля 2020

У меня есть следующая программа:

Function Email{
  param ($to, $Subject, $Body, $Attachment)

    if($process=(get-process 'outlook'))
    {
      kill($process)
      Stop-Process $process -Force
      #$namespace = $outlook.GetNameSpace("MAPI") 
      #$namespace.Logon("outlook")
    }

    $Outlook = New-Object -Com Outlook.Application
    $session = $outlook.Session
    $session.Logon("Outlook")

    $Mail = $Outlook.CreateItem(0)

    foreach ($person in $to){
      $Mail.Recipients.add($person)
    }

    $Mail.Subject = $Subject
    $Mail.Body = $Body
    $Mail.Attachments.Add($Attachment)
    $Mail.Send()
}

При тестировании в ISE и в пакетном режиме она работает как положено. Однако при использовании в другом скрипте powershell он случайно вызывает зависание скрипта, и я не могу открыть Outlook вручную из-за ошибки в нескольких экземплярах.

Как мне переписать это, чтобы правильно учесть экземпляр запущенного outlook (или, по крайней мере, чтобы он не вызывал сценарий, использующий его),

Обновление : Я также пробовал это как:

Function Email{
    param ($to, $Subject, $Body, $Attachment)

    $Creds = Import-CliXml c:\localdata\cred.clixml
    $username= myemail
    Send-MailMessage -To $to -subject $Subject -body $Body -Attachment $Attachment -UseSsl -Port 587 -SmtpServer smtp.office365.com -From $username -Credential $creds
}

, и я не могу преодолеть ошибку «не удается подключиться к удаленному серверу»

Запуск te lnet smtp.office365.com 587 или te lnet smtp.office365.com 25, похоже, ничего не возвращает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...