Уведомление на почту от Планировщика заданий

Posted by

Задача: Хочу когда Завершается задание в планировщике заданий Windows чтобы отчет о ходе выполнения отсылался мне на почту.

Для моей задачи подойдет утилиты именуемая, как SendMail: , но также ее можно скачать и с моего блога: sendEmail-v156.

Скачиваю пакет и распаковываю в системную директорию которую отрабатывает переменная PATH:

C:\Users\Administrator>xcopy Desktop\-v156\.exe %systemroot%\system32

Desktop\sendEmail-v156\sendEmail.exe

1 File(s) copied

После перезапускаю консоль командной строки и смотрю какие атрибуты может принимать утилиты sendEmail.exe:

  • -f → поле «От»
  • -t → поле «Кому»
  • -u → после название/тема письма
  • -m → поле «Тело письма»
  • -a → поле «Вложения к отправляемому письму»
  • -cc → поле «Скрытая копия»
  • -bcc → поле «Скрытая невидимая копия»
  • -xu → учетная запись для аутентификации на SMTP
  • -xp → пароль для учетной записи аутентификации на SMTP
  • -l → специальный лог файл
  • -v → отобразиться версию и различную расширенную информацию о ходе работы в консольном окне которое отобразится в момент запуска задания.
  • -q → тихий режим работы без вывода диагностической информации на консоль

Вообще есть несколько способов отправки уведомления на почту:

Start — Control panel — Administrative Tools — , — Create Basic Task…

Шаг №1: Create a Basic Task

  • Name: test
  • Decription: test

Шаг №2: Trigger

  • When do you want the task to start? Daily

Шаг №3: Trigger → Daily, оставляю как есть (это же пример)

Шаг №4: Action

  • What action do you want the task to perform?: Send an e-mail

(если используется почтовый сервер на базе Zimbra)

  • From: support@ekzorchik.ru
  • To: alexander.ollo@ekzorchik.ru
  • Subject: test
  • Text: test
  • SMTP server: <IP_ADDRESS_ZIMBRA_SERVER>

а после когда заходим в свойства созданного задания не забываем отметить чекрыжеками:

  • Run whether user is logged on or not
  • Run with hightest privileges

Если запустить задание test, то на почту должно прийти Ваше тестовое сообщение

На заметку: Windows средства отправки сообщений работают только через 25 порт, так что использовать сервис Yandex-почта для домена не получится, т. к. порт для smtp — 465.

На заметку: встроенный в систему планировщик заданий по созданной задачи уведомлению письмом не поддерживает аутентификацию на smtp почтовом сервере, а активировать возможность пропуска данной возможности есть грубое нарушение безопасности сервера.

А если использовать стороннее приложение, к примеру утилиту SendEmail.exe, то при создании задания для планировщика нужно выбрать «Start a program», где параметры запуска программы с аргументами будут следующими:

  • Program/Script: C:\Windows\System32\sendEmail.exe
  • Add argumentes (optional): -f alektest@ekzorchik.ru -t alexander.ollo@ekzorchik.ru -u Test -m Test -s<IP_ADDRESS_ZIMBRA_SERVER>:587 -xu alektest@ekzorchik.ru -xp Aa1234567 -v

А если почтовый сервер на базе сервиса «Yandex-почта для домена», то строка с аргументами примет вид:

C:\Users\Administrator>SendEmail.exe -f alektest@ekzorchik.ru -t alexander.ollo@ekzorchik.ru -u Test -m Test -s smtp.yandex.ru:465 -o username=alektest -o password=Aa1234567 -o tls=yes -v

Aug 07 11:25:55 win-9uf3mvoev5s SendEmail.exe[1932]: DEBUG => Connecting to smtp

.yandex.ru:465Aug 07 11:25:55 win-9uf3mvoev5s SendEmail.exe[1932]: DEBUG => My IP address is: 10.9.9.19

Но письмо не уходит, а также же висит на диагностических сообщений, клавиши прерывания не работают, только через Task Manager убить процесс SendEmail.exe *32. Вывод: нужно все же использовать свой почтовый сервер в организации, где многие сервисы до сих пор не умеют работать через шифрованную передачу при подключении к почтовому серверу.

Хорошо, а если попробовать утилиту .exe:

C:\Users\Administrator>blat.exe -v

Blat v3.2.17 (build : Aug 10 2016 22:32:51)

64-bit Windows, Full, Unicode

C:\Users\Administrator>blat.exe -install <IP_ADDRESS_ZIMBRA_SERVER> alektest@ekzorchik.ru profile1

Blat v3.2.17 (build : Aug 10 2016 22:32:51)

64-bit Windows, Full, Unicode

SMTP server set to<IP_ADDRESS_ZIMBRA_SERVER> on port 25 with user alektest@ekzorchik.ru, retry 1 time(s)

C:\Users\Administrator>blat -profile

Blat v3.2.17 (build : Aug 10 2016 22:32:51)

64-bit Windows, Full, Unicode

Profile(s) for all users of this computer --

SMTP:<IP_ADDRESS_ZIMBRA_SERVER> "alektest@ekzorchik.ru" profile1 25

Якобы для удаления профиля нужно сделать так:

C:\Users\Administrator>blat -profile -delete profile1

Blat v3.2.17 (build : Aug 10 2016 22:32:51)

64-bit Windows, Full, Unicode

Error in deleting profile profile1 in the registry

Но почему не отрабатывает, ладно оставлю этот момент на совести разработчика, да и кстати ведь все инсталлируемое вносится в реестр, а значит я могу это удалить:

C:\Users\Administrator>reg delete "HKLM\SOFTWARE\Wow6432Node\Public Domain\Blat" /va /f

The operation completed successfully.

C:\Users\Administrator>blat -profile

Blat v3.2.17 (build : Aug 10 2016 22:32:51)

64-bit Windows, Full, Unicode

Profile(s) for all users of this computer --

Из вывода видно, что профилей нет, они удалены удалением из реестра. Пусть будет так. Нашел решение по удалению профиля (нужно профиль заключить в двойные кавычки)

C:\Users\Administrator>blat -profile -delete "profile1"

Отправка письма через Почтовый сервер Zimbra:

C:\Users\Administrator>blat -body "Test" -to alexander.ollo@ekzorchik.ru -server<IP_ADDRESS_ZIMBRA_SERVER> -f alektest@ekzorchik.ru -u alektest@ekzorchik.ru -pw Aa1234567

Отправка письма через Почтовый сервер «Yandex-почта для домена»:

C:\Users\Administrator>blat -body "Test" -to alexander.ollo@ekzorchik.ru -server smtp.yandex.ru:465 -f alektest@ekzorchik.ru -iu alektest@ekzorchik.ru -ipw Aa1234567

Blat v3.2.17 (build : Aug 10 2016 22:32:51)

64-bit Windows, Full, Unicode

Error: Wait a bit (possible timeout).

*** Error *** SMTP server error

Error: Not a socket.

Error: Not a socket.

Увы не работает.

По итогу могу сказать, что Все свое лучше облачного да и настройка планировщика на уведомление по почте может иметь место быть.

Есть еще одна утилита которая позволяет работать с облачным почтовым сервисом сервисом Yandex, т. е. Через шифрование:

C:\Users\Administrator>mailsend.exe -to alexander.ollo@ekzorchik.ru -from alektest@ekzorchik.ru -ssl -port 465 -auth -smtp smtp.yandex.ru -sub test -v -user alektest@ekzorchik.ru +cc +bc -M "Test" -pass "Aa1234567"

Connecting to smtp.yandex.ru:465

Will detect IPv4 or IPv6 automatically

> libmsock: using getaddrinfo

> AF_INET IPv4

IP address: XXX.XXX.XXX.XXX:465

> EINPROGRESS=10036,EWOULDBLOCK=10035

> connect(): socket=276,rc=-1, errno=10035

> Try socket 276

Cipher: ECDHE-RSA-AES128-GCM-SHA256

Certificate information:

Subject: /C=RU/O=Yandex LLC/OU=ITO/L=Moscow/ST=Russian Federation/CN=smtp.yandex.ru/emailAddress=pki@yandex-team.ru

Issuer: /C=RU/O=Yandex LLC/OU=Yandex Certification Authority/CN=Yandex CA

[S] 220 smtp4p.mail.yandex.net ESMTP (Want to use Yandex.Mail for your domain? V

isit http://pdd.yandex.ru)

[C] EHLO localhost

[S] 250-smtp4p.mail.yandex.net

[S] 250-8BITMIME

[S] 250-PIPELINING

[S] 250-SIZE 42991616

[S] 250-AUTH LOGIN PLAIN XOAUTH2

[S] 250-DSN

[S] 250 ENHANCEDSTATUSCODES

Server does not support AUTH CRAM-MD5

Using AUTH LOGIN

[C] AUTH LOGIN

[S] 334 VXNlcm5hbWU6

[C] YWxla3Rlc3RAbmVtZG9tLWJhbGFzaGloYS5ydQ==

[S] 334 UGFzc3dvcmQ6

[C] QWExMjM0NTY3

[S] 235 2.7.0 Authentication successful.

[C] MAIL FROM: <alektest@ekzorchik.ru>

[S] 250 2.1.0 <alektest@ekzorchik.ru> ok

[C] RCPT TO: <alexander.ollo@ekzorchik.ru>

[S] 250 2.1.5 <alexander.ollo@ekzorchik.ru> recipient ok

[C] DATA

[S] 354 Enter mail, end with "." on a line by itself

Subject: test

From: alektest@ekzorchik.ru

Date: Mon, 07 Aug 2017 12:44:15 +0300

To: alexander.ollo@ekzorchik.ru

X-Mailer: @(#) v1.19 (Windows)

X-Copyright: BSD. It is illegal to use this software for Spamming

Message: Test

Mime type: text/plain

Disposition: inline

Encoding type: none

--QSryZi6Otw1rvfJR--

[C] .

[S] 250 2.0.0 Ok: queued on smtp4p.mail.yandex.net as 1502099026-oNeopmqM0n-hj30

PmKd

[C] QUIT

[S] 221 2.0.0 Closing connection.

Mail sent successfully

где:

  • «+cc» → не запрашивать копию письма
  • «+bc» → не запрашивать скрытую копию письма

Отправка письма через подключение к Zimbra с использование шифрования:

C:\Users\Administrator>mailsend -to alexander.ollo@ekzorchik.ru -from alektest@ekzorchik.ru -port 587 -starttls -auth -smtp<IP_ADDRESS_ZIMBRA_SERVER> -sub test -user alektest@ekzorchik.ru +cc +bc -M "Test" -pass "Aa1234567"

Mail sent successfully

Работает. Вот эту утилиту я возьму на вооружение.

Для себя вывел порядок настройка задания с уведомление на почту:

1) Либо планировщик запускает скрипт где уже внутри него вызывается утилита отправки почты

2) Либо в планировщике создаем задачу, а потом следующей задачей отслеживаем события в журнале Windows

Как только у меня будут появляться какие-либо нюансы работы по этой заметке я ее буду дополнять. А пока у меня всё, с уважением автор блога Олло Александр aka ekzorchik.