Сценарий Powershell не может отправлять электронную почту через Outlook с помощью планировщика задач

У меня есть сценарий, который извлекает последний журнал событий с удаленного компьютера. Отправляйте подробности журнала событий через Outlook определенной группе людей. Скрипт отлично работает при работе через Powershell ISE, но не отправляет электронную почту с помощью планировщика задач. Любая помощь будет оценена по достоинству. Спасибо

Скрипт, как показано ниже:

$Recipients="[email protected]","[email protected]"

Foreach ($name in $Recipients) {
    $Outlook = New-Object -ComObject Outlook.Application

    $Mail = $Outlook.CreateItem(0)
    $Mail.Recipients.Add($name)
    $Mail.Subject ="Testing"
    $Mail.Body ="Demo"
    Write-Host "Sending Email"
    $Mail.Send()
}

person Vishal    schedule 20.12.2016    source источник
comment
Какое сообщение об ошибке вы получите (если оно есть), если запустить скрипт вручную через cmd powershell -file '.\your-script.ps1'?   -  person n01d    schedule 20.12.2016
comment
Планировщик задач, вероятно, использует другого пользователя, чем вы в качестве пользователя командной строки. Убедитесь, что у пользователя планировщика есть правильный почтовый профиль Outlook.   -  person Axel Kemper    schedule 20.12.2016
comment
@ n01d Нет ошибок, показывающих, что он работает нормально, но во время планировщика задач он не отправляет электронную почту   -  person Vishal    schedule 20.12.2016
comment
@AxelKemper В моем Outlook есть 3 учетных записи, как я могу указать, с какой учетной записи он должен отправлять электронную почту.   -  person Vishal    schedule 20.12.2016
comment
Когда вы запускаете объект Outlook.Application, он подключается к почтовому профилю Outlook по умолчанию текущего пользователя. Вы можете создать технического пользователя для планирования почты и настроить желаемую учетную запись электронной почты по умолчанию. Скажите планировщику использовать этого технического пользователя для ваших запланированных задач. В качестве альтернативы можно использовать метод Namespace.Logon для подключения к указанной учетной записи. Подробности уточняйте у Google.   -  person Axel Kemper    schedule 20.12.2016
comment
@AxelKemper При планировании задачи я предоставил свои учетные данные для запуска под этим именем пользователя и паролем. Но по-прежнему не могу отправить электронное письмо. Может быть я возился с вкладкой Действия с задачей планировщика ??   -  person Vishal    schedule 20.12.2016
comment
У меня заканчиваются идеи. Это article может содержать некоторые жизнеспособные подсказки. Пожалуйста, поделитесь своими выводами здесь в качестве ответа.   -  person Axel Kemper    schedule 20.12.2016


Ответы (3)


В настоящее время Microsoft не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любых автоматических, неинтерактивных клиентских приложений или компонентов (включая службы ASP, ASP.NET, DCOM и NT), поскольку Office может демонстрировать нестабильное поведение и / или тупик, когда Office работает в этой среде.

Если вы создаете решение, работающее в контексте на стороне сервера, вам следует попытаться использовать компоненты, которые были безопасны для автоматического выполнения. Или вам следует попытаться найти альтернативы, которые позволяют запускать хотя бы часть кода на стороне клиента. Если вы используете приложение Office из серверного решения, у этого приложения не будет многих необходимых возможностей для успешной работы. Кроме того, вы будете рисковать стабильностью вашего решения в целом. Подробнее об этом читайте в статье Рекомендации по серверной автоматизации Office.

 $From = "[email protected]"
 $To = "[email protected]"
 $Cc = "[email protected]"
 $Attachment = "C:\temp\Some random file.txt"
 $Subject = "Email Subject"
 $Body = "Insert body text here"
 $SMTPServer = "smtp.gmail.com"
 $SMTPPort = "587"
 Send-MailMessage -From $From -to $To -Cc $Cc -Subject $Subject `
 -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl `
 -Credential (Get-Credential) -Attachments $Attachment

Также вы можете рассмотреть возможность использования EWS, см. Управляемый API EWS, EWS и веб-службы в Exchange для получения дополнительной информации.

person Eugene Astafiev    schedule 20.12.2016

Планировщик заданий работает как служба - и никакое приложение Office (включая Outlook) не может использоваться в службе.

person Dmitry Streblechenko    schedule 20.12.2016
comment
Вы хотите сказать, что я не могу отправлять электронную почту из Outlook ... пока запустите сценарий PowerShell из планировщика задач - person Vishal; 20.12.2016
comment
Вы должны использовать Send-MailMessage, класс .NET MailMessage ИЛИ EWS API (если вы используете сервер Exchange), чтобы использовать это в запланированной задаче. Честно говоря, использование COM-объекта Outlook для этого - действительно неправильный подход по сравнению с другими вариантами, доступными для достижения этой цели. - person bluuf; 20.12.2016
comment
@Vishal - да, я именно об этом. - person Dmitry Streblechenko; 20.12.2016

Вам следует просто использовать Send-MailMessage вместо того, чтобы пытаться использовать для этого COM-объект Outlook. Таким образом, вы не полагаетесь на почтовый профиль и другие настройки (которые должны быть установлены в Outlook под пользователем, которого вы используете для запуска задачи). Я также вижу некоторые странные вещи в вашем коде: для каждого получателя вы создаете новый COM-объект COM Outlook, а затем пытаетесь отправить письмо: перемещение цикла For Loop для запуска После создания COM-объекта Outlook кажется более логичным.

person bluuf    schedule 20.12.2016