Отправка сообщений электронной почты из командной строки, с помощью утилиты Blat.exe

logo_cmd.pngСегодня я расскажу о том, как отправлять сообщения на электронную почту из командной строки. Можно привести массу ситуаций, когда необходимо выполнять данное действие. Например, для контроля выполнения различных регламентных заданий, резервного копирования баз данных и пр. А поможет нам в этом маленькая, удобная и абсолютно бесплатная утилита Blat.exe.

 

1. Утилита  Blat.exe

Скачать программу Blat можно с официального сайта или с текущего. На момент написания статьи последней была версия 3.0.7. В архиве 2 папки: full — непосредственно сама программа и docs — документация по программе. Для установки необходимо скопировать содержимое папки full в «C:\Windows\system32\» или в любую другую директорию, но в этом случае при вызове программы придется указывать путь к исполняемому файлу. Я в своем примере буду использовать второй вариант.

Есть возможность сразу создать профиль для отправки сообщений, для этого необходимо выполнить «Blat -install smtp.yoursite.tld youruserid@yoursite.tld». Я не буду рассматривать данный режим работы. Подробнее читайте в файле «readme.txt».

2. bat-файлы для отправки сообщений

Если открыть файл «syntax.txt» из прилагаемой документации, то можно увидеть огромный список команд, поддерживаемый данной утилитой, что говорит о ее богатых возможностях. Выделим основные и получим следующий «батник» send_email.bat (скачать все файлы в одном архиве) для отправки сообщения с адреса report@mydomen.com на адрес user@mydomen.com:

rem *** Путь к программе blat.exe ***
set file_blat=D:\blat\blat.exe
rem *** Путь к файлу с текстом сообщения ***
set file_text=D:\blat\report.txt
rem *** Путь к файлу для сохранения лога ***
set file_log=D:\blat\log_blat.txt

rem *** Данные отправителя ***
set from_server=smtp.mydomen.com
set from_port=25
set from_mail=report@mydomen.com
set from_name=report
set from_pass=password

rem *** Данные получателя ***
set to_mail=user@mydomen.com
set to_subject="Report"

rem *** Отправка сообщения ***
%file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -u %from_name% -pw %from_pass% -to %to_mail% -s %to_subject% -log %file_log% 

Таким образом, для отправки сообщения достаточно будет просто вызвать файл send_email.bat:

Blat_01

Можно доработать файл таким образом, чтобы адрес получателя и тема сообщения задавалась параметрами запуска. Вот содержимое такого bat-файла:

rem *** Путь к программе blat.exe ***
set file_blat=D:\blat\blat.exe
rem *** Путь к файлу с текстом сообщения ***
set file_text=D:\blat\report.txt
rem *** Путь к файлу для сохранения лога ***
set file_log=D:\blat\log_blat.txt

rem *** Данные отправителя ***
set from_server=smtp.mydomen.com
set from_port=25
set from_mail=report@mydomen.com
set from_name=report
set from_pass=password

rem *** Отправка сообщения ***
%file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -u %from_name% -pw %from_pass% -to %1 -s %2 -log %file_log%

И пример его запуска с параметрами:

Blat_02

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

rem *** Путь к программе blat.exe ***
set file_blat=D:\blat\blat.exe
rem *** Путь к файлу с текстом сообщения ***
set file_text=D:\blat\report.txt
rem *** Путь к файлу для сохранения лога ***
set file_log=D:\blat\log_blat.txt
rem *** Путь к файлу с адресами получателей ***
set file_to=D:\blat\mail_list.txt
rem *** Тема сообщения ***
set to_subject="Report"

rem *** Данные отправителя ***
set from_server=smtp.mydomen.com
set from_port=25
set from_mail=report@mydomen.com
set from_name=report
set from_pass=password

rem *** Отправка сообщения ***
%file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -u %from_name% -pw %from_pass% -tf %file_to% -s %to_subject% -log %file_log%

Где файл mail_list.txt будет содержать адреса получателей разделенные переносом строки.

Ну и наконец, приведу пример файла, который я использую в данный момент. В нем все файлы находятся в директории с исполняемым bat-файлом, список адресов берется из файла, а тема письма задается параметром. Сделано это для того чтобы в зависимости от работы задания отсылать письма с разной темой. Например:

rem Резервное копирование завершилось успешно
call D:\blat\send_email.bat "Backup - OK"
rem Резервное копирование завершилось c ошибкой
call D:\blat\send_email.bat "Backup - ERROR"

Содержимое файла:

rem *** Основная директория файла ***
set dir=%~dp0
rem *** Путь к программе blat.exe ***
set file_blat=%dir%\blat.exe
rem *** Путь к файлу с текстом сообщения ***
set file_text=%dir%\report.txt
rem *** Путь к файлу для сохранения лога ***
set file_log=%dir%\log_blat.txt
rem *** Путь к файлу с адресами получателей ***
set file_to=%dir%\mail_list.txt

rem *** Данные отправителя ***
set from_server=smtp.mydomen.com
set from_port=25
set from_mail=report@mydomen.com
set from_name=report
set from_pass=password

rem *** Отправка сообщения ***
%file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -u %from_name% -pw %from_pass% -tf %file_to% -s %1 -log %file_log%

 

3. Заключение

Данные примеры не описывают все возможности программы Blat.exe. Она поддерживает сервера SMTP, NNTP, POP3 и IMAP, есть возможность хранить настройки в файле или в реестре, прикреплять вложения в тело письма и многое другое. Я думаю, что взяв за основу предложенные выше файлы, вы сможете написать любой скрипт для отправки электронных сообщений при помощи этой замечательной утилиты.

Помогла ли Вам данная статья?
Да, спасибо, все получилось.
Немного помогла.
Совсем не помогла.
Не то, что я искал(а).
Смотреть результаты
Запись опубликована в рубрике cmd с метками , , , , . Добавьте в закладки постоянную ссылку.


30 Responses to Отправка сообщений электронной почты из командной строки, с помощью утилиты Blat.exe

  1. myr4ik07 говорит:

    Спасибо за знакомство с утилитой. Проверил, работает нормально. Логи пишет. Потрясающее, очень функционально.

  2. Виталий говорит:

    Спасибо, работает!

  3. Виталий Онянов говорит:

    Пожалуйста, рад стараться! 🙂

    • Антон говорит:

      Привет Виталий
      Вот в этой статье https://xaker.name/threads/29763/
      Там создают один бантик код у него такой
      @echo off

      copy /Y «%APPDATA%\Yandex\Punto Switcher\User Data\diary.dat» «%APPDATA%\diary.dat» >nul
      start blat.exe -install smtp.mail.ru [email]TEST@mail.ru[/email] 3 25 — [email]TEST@mail.ru[/email] ПАРОЛЬ
      blat.exe -body «DiaryPS» -subject DiaryPS -to [email]TEST@mail.ru[/email] -attach %APPDATA%\diary.dat

      exit
      Допустим почта у меня такая hak.peh@yandex.ru
      а пароль 12345
      Там написано как вставлять но я не понял .
      как он будет выглядеть в коде ?
      заранее спасибо ))

  4. Сергей говорит:

    Добрый день.Для моей ситуации посоветовали именно эту програмку,помогите разобраться.Мне нужно что бы с домашнего компьютера при подключении к интернету(динамический ip адрес) blat.exe отправляла его  ip адрес мне на почту что бы я мог с работы подключаться к домашнему компьютеру.Как это организовать?

  5. Сергей говорит:

    Уже разобрался.

    • DES говорит:

      Надеюсь ты разобрался с DynDNS ? ()
      А не с программой отправки почты из командной строки…

      • Генри говорит:

        Сергею верно посоветовали, блат посылает письмо и по заголовку читаеться ip. А свой комент засунь в жопу т.к. он не подходит.

  6. DES говорит:

    Такой вопрос, возвращает ли прога статус завершения?
    Как определить отправлена ли почта?
     

    • Виталий Онянов говорит:

      Можно через %ERRORLEVEL%

      Вот, нашел пример на официальном сайте:

      @echo off
      :::::::::::::: Lets set some variables ::::::::::::::
      set email=tim@blat.tld
      set server=-server localhost
      set subject=-s "Test Blat ERRORLEVEL's"
      set tof=-to %email% -f %email%
      set msg=%0
      ::::::::::::::::: Now we run Blat!  :::::::::::::::::
      blat %msg% %tof% %subject% %server%
      ::::::::::: A quick message to the screen :::::::::::
      echo.
      echo ErrorLevel returned from Blat == %ERRORLEVEL%
      echo.
      
      :: Check each errorlevel from 0 through 14 in that order
      set ELmsg=Blat returned this ERRORLEVEL
      ::::::::::::::: Here is the FOR loop! :::::::::::::::
      FOR /L %%i IN (0,1,14) DO if ERRORLEVEL %%i echo %ELmsg% %%i
  7. Эд говорит:

    А как отправить картинку, вложения поддерживает?

    • Виталий Онянов говорит:

      Да, вложения поддерживаются. Ключ:

       -attach < ИмяФайла > 

      Подробнее можно прочитать в файле syntax.txt, каталога docs, дистрибутива установки.

  8. Валерий говорит:

    Добрый день. Не получается отправить этой утилитой (и не только этой) сообщение через Яндекс. Указываю сервис smtp.yandex.ru, порт 465, логин и пароль — без ошибок. Причина скорее всего в SSL, но в статье и в комментариях об этом ни слова. Может это только я где-то туплю? Как все-таки отправить почту через Яндекс?

  9. петр говорит:

    такая же фигня статью скопируют а на важные вопросы не отвечают что действительно заботит пользователей

    • Виталий Онянов говорит:

      Статью я не «копировал» а писал самостоятельно. Писал в то время, когда и mail и yandex работали по 25-ому порту. В настоящее время необходимо использовать протокол SSL и, соответственно, 465-ый порт, однако программа данный протокол не поддерживает. Сделать перенаправление с 25-ого порта на 465 можно с помощью бесплатной программы stunnel.

  10. Анатолий говорит:

    ПОМОГИТЕ — Скажите почему не таботает код??

    ipconfig /all > id.txt
    blat.exe -install -server smtp.mail.ru -port 25 -f tolianvlaev_mail.ru@mail.ru -u tolianvlaev_mail.ru@mail.ru -pw 123456789
    blat.exe id.txt -to tolianvlaev_mail.ru@mail.ru
    del id.txt
    pause

    • Виталий Онянов говорит:

      На mail.ru c 1-ого декабря 2014 года закрыт порт 25. Необходимо использовать порт 465 для защищенного соединения SSL, однако программа данный протокол не поддерживает. Сделать перенаправление с 25-ого порта на 465 можно с помощью бесплатной программы stunnel.

      • Анатолий говорит:

        поможете прописать?

        • Виталий Онянов говорит:

          Надо отдельную статью писать про stunnel. Но в ближайшее время написать ее не смогу по причине острой нехватки времени. Попробуйте поискать мануал по этой программе на других ресурсах, например здесь или здесь. Для mail.ru все то же.

          • Анатолий говорит:

            спасибо, помогло
            но программа должна висеть в трее
            есть альтернатива?

          • Виталий Онянов говорит:

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

          • Анатолий говорит:

            все зароботало, а как сделать, чтобы он не выводил сообщения о запуске, установке, удалении, и остановке сервера??

          • Анатолий говорит:

            ага все решил
            спасибо за все)))

  11. Анатолий говорит:

    А не знаете почему на одном компе работает, а на другом — нет

  12. Аноним говорит:

    При получении писем кодировка не читаемая, приходится в каждом письме менять кодировку на Кириллица (Windows). И тема на русском языке не отражается.
    Как этого избежать?

  13. Виталий говорит:

    День добрый.
    Очень интересная и нужная тема. У меня возник вопрос к знающим людям, сам не очень в коде. Отправку сообщения настроил, письмо приходит пустое. Как мне присылать письмо с содержанием, что в папке C:\backup был создан бэкап (название бэкапа и обьем). Буду очень признателен за помощь.

  14. Михаил Лялин говорит:

    blat не обновлялся с 2014 г.!
    М.б., стоит перейти на использование https://sourceforge.net/projects/mail-alert/reviews ?

Добавить комментарий для Эд Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *