Отправка автоматических писем с помощью SendEmail & Windows Task Scheduler
Независимо от того, чем вы занимаетесь, обычно каждый в какой-то момент должен отправить электронное письмо начальнику или руководителю с ежедневными, еженедельными или ежемесячными отчетами о состоянии. Часто это не что иное, как отправка по электронной таблице данных, файлов журналов или других отчетов, которые обычно генерируются автоматически.
Сбор данных и создание отчетов могут не иметь большого значения для вас, но не забывайте записывать это электронное письмо время от времени, что может стать настоящей проблемой. И если вы забудете один или два раза, похоже, что вы не на вершине своей игры.
Здесь ваш компьютер пригодится.
Большинство пользователей Windows знают о планировщике задач Windows
к настоящему времени В этой статье я собираюсь показать вам, как вы можете использовать планировщик задач Windows в сочетании с потрясающим средством командной строки SMTP SendEmail для отправки запланированных автоматических сообщений электронной почты, которые содержат несколько вложений.
Настройка SendEmail для правильной отправки отчетов
Задача здесь довольно проста. У вас есть каталог, в котором хранятся несколько автоматических отчетов. Возможно, это сводная информация о файлах журналов для серверов, которые вы поддерживаете, и которые вы должны отправить своему руководителю. Возможно, это отчет о трафике Google Analytics, который вам нужно переслать клиентам вашего сайта. Независимо от необходимости, этот метод позволит вам автоматически запускать автоматическое электронное сообщение с отчетом, которое будет содержать столько вложений, сколько вам нужно отправить. Если у вас есть система, настроенная на автоматическое обновление этих файлов перед отправкой запланированной электронной почты — у вас будет полностью автоматизированная система отчетов.
Вот как это работает. Допустим, я отправляю три отчета Google Analytics, которые я генерирую и загружаю каждый четверг, и храню их в каталоге C: / Analytics. Когда вы загружаете SendEmail по ссылке выше, настройка не требуется. Просто поместите его в любой каталог, из которого вы хотите запустить. В этом случае я просто помещаю его в тот же каталог, чтобы мне не нужно было указывать путь к вложениям в моей командной строке.
Пользователи Linux уже давно используют команду «sendmail», так что это не является для них чем-то новым, но совместимый с Windows инструмент «SendEmail» — это то, что позволяет пользователям Windows иметь те же функции командной строки. Если у вас есть исполняемый файл, находящийся в таком каталоге, при условии, что вы знаете синтаксис, вы можете сделать много интересных вещей с помощью инструмента.
Когда вы вводите команду «SendEmail» в командной строке (или запускаете ее из приложения), вы должны следовать ее ряду параметров. Критические, которые нас интересуют, показаны в примерах ниже.
- -е[email protected]: этот параметр является адресом электронной почты, который будет «отправителем».
- -T[email protected]: это адрес электронной почты получателя.
- -U Обновления статуса в понедельник: это тема
- -м Вот аналитические данные за эту неделю! : Это тело сообщения.
- — Analytics_Channel1.csv Analytics_Channel2.csv Analytics_Channel3.csv: это вложения.
- -s smtp.gmail.com:587: SMTP-сервер и порт
- -Сей[email protected]: имя идентификатора аутентификации SMTP
- -хр A1ienz2A51: пароль аутентификации SMTP
- -о tls = yes: SMTP использует TLS (или SSL)
Это все параметры, которые вам понадобятся для выполнения задачи, которую я подробно рассмотрю в этой статье. После того, как вы загрузили файл SendEmail.exe на свой компьютер, вы готовы использовать планировщик заданий Windows для отправки автоматической команды электронной почты SendEmail каждый день, неделю или месяц.
Настройка планировщика заданий Windows
Откройте планировщик заданий Windows, выбрав Пуск-> Программы-> Стандартные-> Системные инструменты-> Планировщик заданий. Нажмите, чтобы создать основную задачу.
Это проведет вас через мастер планирования задач, где вы сможете назначить любое расписание календаря, которое вы хотите, чтобы эти письма отправлялись.
На следующем экране выберите «Запустить программу», и затем вы увидите экран, на котором вам нужно настроить задачу. Здесь вы должны указать путь к исполняемому файлу SendEmail и параметры.
Вся строка аргумента, которую я набрал, была следующей:
Вернитесь к списку параметров выше, но, как вы можете видеть, он отправляет электронное письмо из вашей учетной записи Gmail получателю, у которого есть учетная запись Yahoo с строкой темы: «Вот данные аналитики за эту неделю!» Когда выполняется эта задача ( который будет запускаться каждую неделю), он запускает ваше сообщение и прикрепляет вложения файлов, которые вы определили ваши параметры выше.
Вот как выглядит полученное письмо.
Как видите, нет никаких признаков того, что это происходит из автоматического скрипта. Вместо этого он имеет личное сообщение и необходимые файлы данных / информации, прикрепленные к электронному письму. До тех пор, пока вы убедитесь, что файлы обновляются до того, как это электронное письмо будет отправлено, вам никогда не придется беспокоиться о том, чтобы забыть отправить еще одно из этих обновлений статуса. Вы можете выглядеть так, как будто вы очень продуктивны. Между тем, вы можете поработать над подходом Сайката к тому, чтобы быть проклятым ниндзя
Вы когда-нибудь использовали инструмент командной строки SendEmail для Windows? Или, может быть, у вас есть другой метод для отправки автоматических писем? Поделитесь своим собственным мнением об этом инструменте или других подобных инструментах в разделе комментариев ниже.
Уведомление на почту от Планировщика заданий
Задача: Хочу когда Завершается задание в планировщике заданий Windows Server 2008 R2 чтобы отчет о ходе выполнения отсылался мне на почту.
Для моей задачи подойдет утилиты именуемая, как SendMail: , но также ее можно скачать и с моего блога: sendEmail-v156.
Скачиваю пакет и распаковываю в системную директорию которую отрабатывает переменная PATH:
C:\Users\Administrator>xcopy Desktop\sendEmail-v156\sendEmail.exe %systemroot%\system32
После перезапускаю консоль командной строки и смотрю какие атрибуты может принимать утилиты 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:
а после когда заходим в свойства созданного задания не забываем отметить чекрыжеками:
- 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 :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 alektest@ekzorchik.ru profile1
Blat v3.2.17 (build : Aug 10 2016 22:32:51)
64-bit Windows, Full, Unicode
SMTP server set to 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: «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 -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
IP address: XXX.XXX.XXX.XXX:465
> connect(): socket=276,rc=-1, errno=10035
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
[C] EHLO localhost
[S] 250-SIZE 42991616
[S] 250-AUTH LOGIN PLAIN XOAUTH2
[S] 250 ENHANCEDSTATUSCODES
Server does not support AUTH CRAM-MD5
Using AUTH LOGIN
[S] 334 VXNlcm5hbWU6
[S] 334 UGFzc3dvcmQ6
[S] 235 2.7.0 Authentication successful.
[S] 354 Enter mail, end with «.» on a line by itself
Date: Mon, 07 Aug 2017 12:44:15 +0300
X-Mailer: @(#) mailsend v1.19 (Windows)
X-Copyright: BSD. It is illegal to use this software for Spamming
Mime type: text/plain
Encoding type: none
[S] 250 2.0.0 Ok: queued on smtp4p.mail.yandex.net as 1502099026-oNeopmqM0n-hj30
[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 -sub test -user alektest@ekzorchik.ru +cc +bc -M «Test» -pass «Aa1234567»
Mail sent successfully
Работает. Вот эту утилиту я возьму на вооружение.
Для себя вывел порядок настройка задания с уведомление на почту:
1) Либо планировщик запускает скрипт где уже внутри него вызывается утилита отправки почты
2) Либо в планировщике создаем задачу, а потом следующей задачей отслеживаем события в журнале Windows
Как только у меня будут появляться какие-либо нюансы работы по этой заметке я ее буду дополнять. А пока у меня всё, с уважением автор блога Олло Александр aka ekzorchik.
Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:
Поблагодари автора и новые статьи
будут появляться чаще 🙂
Карта МКБ: 4432-7300-2472-8059
Yandex-деньги: 41001520055047
Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.