Задача: Хочу когда Завершается задание в планировщике заданий Windows Server 2008 R2 чтобы отчет о ходе выполнения отсылался мне на почту.
Для моей задачи подойдет утилиты именуемая, как SendMail: , но также ее можно скачать и с моего блога: sendEmail-v156.
Скачиваю пакет и распаковываю в системную директорию которую отрабатывает переменная PATH:
C:\Users\Administrator>xcopy Desktop\sendEmail-v156\sendEmail.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 — Task Scheduler, – 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. Вывод: нужно все же использовать свой почтовый сервер в организации, где многие сервисы до сих пор не умеют работать через шифрованную передачу при подключении к почтовому серверу.
Хорошо, а если попробовать утилиту blat.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: @(#) mailsend 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.