PowerShell: Обработка запросов и рассылка email

На работе появилась задача обрабатывать текстовые файлы запросов и рассылать их содержимое пользователям. Посмотрим на решение этой задачи…

Шаблон

Шаблон текстового файла, который обработает скрипт и отправит email по указанным в шаблоне параметрам:

1
2
3
To: user1@example.com,user2@example.com
Subject: Request #1
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam elementum sem ex, in mattis leo ornare in.

Скрипт

Скрипт обрабатывает содержимое текстовых файлов определённого шаблона и отправляет содержимое этих файлов на email пользователям.

Скрипт состоит из следующих компонентов:

  • app.mail.request.ini - файл с настройками.
  • app.mail.request.ps1 - приложение.
  • task.mail.request.xml - задача для Windows Task Scheduler.

Установка

1
$App = "mail-request"; Invoke-Command -ScriptBlock $([scriptblock]::Create((Invoke-WebRequest -Uri "https://pkgstore.github.io/pwsh.install.txt").Content)) -ArgumentList ($args + @($App))

Настройка

Файл настройки app.mail.request.ini представляет собой простой файл .ini, содержащий в себе приватные параметры.

Параметры

  • Server - IP-адрес сервера.
  • Port - SMTP-порт сервера.
  • User - имя пользователя для SMTP-аутентификации.
  • Password - пароль пользователя для SMTP-аутентификации.

Приложение

Приложение app.mail.request.ps1 забирает параметры из файла настроек, а также обрабатывает значения, переданные в терминале.

Параметры

  • Request - путь к файлам запросов.
  • From - поле “От”.
  • Cc - поле “Копия”.
  • Bcc - поле “Скрытая копия”.
  • Priority - приоритет email. Значения:
    • Low - низкий приоритет.
    • Normal - стандартный приоритет.
    • High - высокий приоритет.
  • LogPath - путь к файлу журнала. По умолчанию: ${PSScriptRoot}\log.mail.request.txt.
  • LogSize - размер файла журнала. Файл журнала будет помещён в ZIP-архив при превышении этого значения. По умолчанию: 50MB.
  • Attach - если указано, файл запроса будет прикреплён к email.
  • Save - если указано, файл запроса не будут удалён после отправки email.
  • HTML - если указано, email будет иметь разметку HTML.
  • SSL - если указано, подключение к SMTP-серверу будет осуществляться при помощи протокола SSL.
  • BypassCertValid - если указано, проверка валидности сертификата при подключении к SMTP-серверу через протокол SSL будет отключена.

Логирование

Для логирования используются функции Start-Transcript и Stop-Transcript. Журнал выполнения сохраняется в директории скрипта в файле log.mail.request.txt.

Примеры

  • Скрипт обрабатывает запросы *.txt в директории C:\Request\ и рассылает письма от request@example.com:
1
.\app.mail.request.ps1 -Domain 'example.org' -From 'request@example.com' -Request 'C:\Request\*.txt'
  • Скрипт обрабатывает запросы *.txt в директории C:\Request\ и рассылает письма от request@example.com, а также отправляет копии писем на mail@example.net и mail@example.biz:
1
.\app.mail.request.ps1 -Domain 'example.org' -From 'request@example.com' -Request 'C:\Request\*.txt' -Cc 'mail@example.net', 'mail@example.biz'
  • Скрипт обрабатывает запросы *.txt в директории C:\Request\ и рассылает письма от request@example.com, а также отправляет скрытые копии писем на mail@example.net и mail@example.biz:
1
.\app.mail.request.ps1 -Domain 'example.org' -From 'request@example.com' -Request 'C:\Request\*.txt' -Bcc 'mail@example.net', 'mail@example.biz'
  • Скрипт обрабатывает запросы *.txt в директории C:\Request\ и рассылает письма от request@example.com при этом подключаясь к SMTP-серверу через SSL с обходом проверки валидации сертификата:
1
.\app.mail.request.ps1 -Domain 'example.org' -From 'request@example.com' -Request 'C:\Request\*.txt' -SSL -BypassCertValid