Как автоматически генерировать и отправлять по электронной почте компьютерную статистику
Важно проверять различные данные журнала и статистику на вашем сервере каждый день, но это становится утомительным. Разве не было бы неплохо получать одно электронное письмо со всеми основными моментами каждый день, так что вам даже не нужно заходить на сервер, чтобы проверить наличие проблем? Это руководство покажет вам, как настроить автоматическую электронную почту в Linux и Windows..
Мы специально рассмотрим это для Ubuntu и Windows 8.1, где Gmail используется в качестве сервера электронной почты, с которого отправляется почта. Если у вас есть другая версия Linux или Windows, или вы предпочитаете использовать какой-либо другой почтовый сервис, приведенные здесь инструкции должны легко адаптироваться.
Автоматизированные электронные письма в Linux
Для этого мы будем использовать два разных пакета, ssmtp и mailutils, поэтому установите их оба с помощью следующей команды:
$ sudo apt-get install ssmtp mailutils
После того, как они установлены, нам нужно внести некоторые изменения в файл конфигурации SSMTP:
$ sudo vi /etc/ssmtp/ssmtp.conf
Отредактируйте файл с этими изменениями (безопасно просто стереть весь текст в файле и скопировать / вставить эти настройки, если хотите):
# Этот адрес будет получать электронные письма, поэтому введите свой адрес электронной почты здесь, если вы хотите получить их.
# Укажите здесь почтовый сервер (оставьте как есть, если вы используете Gmail).
mailhub = smtp.gmail.com: 587
# Доменное имя, с которого будет приходить почта.
rewriteDomain = gmail.com
# Адрес электронной почты, с которого должны быть эти письма.
# Настройки SSL / TLS, необходимые для Gmail и большинства других почтовых серверов.
UseTLS = Да
UseSTARTTLS = Да
# Имя пользователя и пароль к вашей учетной записи Gmail.
AuthUser = имя пользователя
AuthPass = пароль
# Разрешить возможность указать адрес отправителя, отличный от указанного выше.
FromLineOverride = да
Когда вы закончите редактирование файла, вы захотите изменить разрешения, так как ваш пароль Gmail хранится в незашифрованном виде..
$ sudo chmod 640 /etc/ssmtp/ssmtp.conf
$ sudo chown username.username /etc/ssmtp/ssmtp.conf
Всегда более безопасно сделать root владельцем файла, но тогда нам нужно будет использовать команду sudo в нашем скрипте, и он запросит у нас пароль, что не позволит автоматизировать весь этот процесс..
Если вы используете общий сервер и беспокоитесь о том, что ваш пароль хранится в незашифрованном виде и доступен для чтения root, создайте одноразовую учетную запись Gmail или используйте почтовый сервер, который не требует никакой проверки подлинности..
Чтобы убедиться, что все настроено правильно, давайте попробуем проверить электронную почту:
$ echo "Тестирование" | mail -s "Проверка настроек почты" [email protected]
«Тестирование» будет в теле письма, а тема будет «Тестирование настройки почты». Проверьте свою электронную почту, чтобы убедиться, что вы ее получили..
Написание сценария для электронных писем
Теперь, когда мы можем отправлять электронные письма из командной строки, давайте напишем скрипт, который отправит нам некоторую основную информацию о нашей системе..
#! / Bin / Баш
# Проверьте место на жестком диске
echo "Место на жестком диске:"> /home/geek/email.txt
df -h >> /home/geek/email.txt
# Список пользователей, которые вошли в систему
echo "В данный момент пользователи вошли в систему:" >> /home/geek/email.txt
кто >> /home/geek/email.txt
# Список текущих запущенных процессов
echo "Запуск процессов:" >> /home/geek/email.txt
ps -e >> /home/geek/email.txt
# Отправить письмо
cat /home/geek/email.txt | mail -s "Ежедневная информация о сервере" [email protected]
# Удалить файл, который мы создали
rm /home/geek/email.txt
Очевидно, что вы можете получить гораздо больше подробностей с вашим сценарием и даже сделать форматирование немного приятнее, но вот как выглядит результат в нашей электронной почте:
Теперь, когда скрипт написан и протестирован, мы можем использовать cron для его автоматического выполнения каждый день в одно и то же время. В этом примере мы настроим электронную почту, которая будет отправляться в 2:00 утра каждое утро, чтобы мы могли просмотреть данные позже в тот же день..
$ crontab -e
Для 2:00 утра по электронной почте добавьте:
0 2 * * * /home/geek/script.sh
Мы написали целую статью о файлах crontab, если вам нужна дополнительная помощь по этой части.
Автоматические электронные письма в Windows
Отправка электронных писем в командной строке возможна через PowerShell, но мы обнаружили, что реализовать эту функцию намного проще в сторонних приложениях, особенно при использовании Gmail. SendEmail - это бесплатная программа, доступная для Windows, благодаря которой интеграция с Windows Task Scheduler и Gmail становится проще. Нажмите на ссылку выше, чтобы загрузить последнюю версию, и убедитесь, что вы взяли версию с поддержкой TLS.
После того как вы загрузили SendEmail, извлеките zip-файл и поместите содержимое в то место, где вы сможете хранить его до тех пор, пока вы планируете отправлять автоматические электронные письма. В этом примере мы просто собираемся сохранить программу в C: \ SendEmail
Давайте проверим SendEmail, чтобы быстро понять, как это работает. Откройте командную строку, введя cmd в меню «Пуск» или «Выполнить» (Ctrl + R).
В открытой командной строке используйте команду изменения каталога, чтобы перейти к тому месту, где вы сохранили файлы SendEmail..
cd C: \ SendEmail
Теперь мы можем попробовать отправить тестовое письмо с помощью следующей команды:
sendEmail -f [email protected] -t [email protected] -s smtp.gmail.com:587 -xu имя_пользователя -xp пароль -u "Тестовая тема письма" -m "Это тестовая электронная почта."
Очевидно, замените «username» и «password» на учетные данные вашей учетной записи перед выполнением команды.
Вот что на самом деле делает команда выше:
SendEmail
выполняет программу.
-е
- с адреса
-T
- адресовать
-s
- SMTP-сервер
-Сей
- имя пользователя аккаунта
-хр
- пароль от аккаунта
-U
- Тема письма
-м
- основной текст письма
Проверьте свой почтовый ящик, чтобы убедиться, что вы получили тестовое письмо, и тогда мы можем перейти к написанию скрипта, который будет отправлять нам информацию о сервере.
Написание сценария для электронных писем
Чтобы получить максимальную отдачу от нашего сценария, мы напишем его для PowerShell. Откройте Windows PowerShell ISE, введя powershell_ise.exe в строку «Выполнить» (Ctrl + R)..
В правой части окна PowerShell ISE вы можете перечислить все команды, которые PowerShell может выполнить. Это должно дать вам хорошее начало для создания типов информации, о которой вам необходимо сообщить. В вашем сценарии вы также можете вызывать сторонние программы для вывода информации (т.е. SendEmail - стороннее приложение, но PowerShell и cmd могут использовать его для выполнения задач, которые они обычно не могут).
В нашем примере сценария мы проверим текущее использование диска C, покажем запущенные в данный момент процессы и покажем все файлы, которые в данный момент распределяются по сети..
# Проверьте место на жестком диске
echo "C: Использование диска:"> C: \ SendEmail \ info.txt
Get-WmiObject win32_LogicalDisk -Filter "DeviceID = 'C:'" | Выбор размера объекта, FreeSpace >> C: \ SendEmail \ info.txt
# Список текущих запущенных процессов
echo "Запуск процессов:" >> C: \ SendEmail \ info.txt
get-process >> C: \ SendEmail \ info.txt
# Список файлов / папок, которые в данный момент доступны
echo "SMB share:" >> C: \ SendEmail \ info.txt
get-smbshare >> C: \ SendEmail \ info.txt
# Отправить письмо
введите C: \ SendEmail \ info.txt | C: \ SendEmail \ sendEmail -f [email protected] -t [email protected] -s smtp.gmail.com:587 -xu username -xp пароль -u "Ежедневная информация о сервере"
# Удалить файл, который мы сделали
rm C: \ SendEmail \ info.txt
В этом сценарии различная информация выводится в C: \ SendEmail \ info.txt, а затем текст в этом документе отправляется нам по электронной почте, прежде чем он будет удален. Сохраните сценарий с расширением файла ps1 (файл PowerShell).
Закончив работу сценария, запустите быстрый тест из приглашения «Выполнить», чтобы убедиться, что он работает правильно..
Просто используйте PowerShell
команда с -файл
аргумент и укажите путь к вашему сценарию.
powershell -file "c: \ SendEmail \ daily-email.ps1"
Проверьте свой почтовый ящик, чтобы убедиться, что вы получили письмо - если нет, просмотрите скрипт на наличие ошибок синтаксиса. Вот как выглядит сгенерированное письмо из нашего примера скрипта:
Вы можете поиграть с форматированием (например, отображением пустых строк между текстом), чтобы оно лучше отображалось на вашем устройстве, или, что еще лучше, вы можете использовать стороннюю программу, которая выводит необходимую информацию в более удобочитаемом формате, чем Windows ( процесс написания сценария останется прежним).
После того, как вы проработали изломы в своем скрипте, вы можете использовать планировщик заданий Windows для его автоматизации. Откройте планировщик заданий Windows через меню «Пуск».
При открытом планировщике задач выберите «Действие»> «Создать базовую задачу»..
Назовите эту задачу как-нибудь «Ежедневный почтовый скрипт» и нажмите «Далее». На следующем экране выберите частоту, с которой вы хотите запускать скрипт электронной почты, возможно, ежедневно. Затем выберите время запуска скрипта и нажмите «Далее»..
Теперь вы должны быть в части «Действие» мастера, выбрать «Запустить программу» и введите тот же текст, который мы ввели в приглашение «Выполнить» ранее, чтобы протестировать наш скрипт.
Нажмите «Далее» и затем нажмите «Да» в этом окне:
Нажмите Готово в последнем меню, и вы закончили составлять расписание ваших автоматических электронных писем..