Как создать и отправить архивы по почте из bat файла
Как создать и отправить архивы по почте из bat файла
Много воды утекло с тех пор как, я написал небольшой батник и поместил его исполнение в виндовый планировщик. С тех пор это самая стабильная вещь, которая работает без вмешательства админа. У меня ушло немало времени прежде чем я собрал из обрывков команд нужный мне алгоритм. Вкратце: с сервера приложений выгружается 2 файла, необходимо их запаковать и отправить по почте.
Итак имеем 2 tab файла: Summa_*.tab, Reg_*tab
* — это текущая дата, т.к. приложение в конец имени файла дописывало текущую дату.
Для начала сжимаем файлы, но т.к. корпоративный почтовый сервер за раз не пропускал больше 3 Мб, было решено делать архивы по 2500 КБ. Для этого используем следующую конструкцию:
«C:\Program Files (x86)\WinRar\rar» a -agYYYY-MM-DD-HHMMSS -v2500 C:\Temp\archive_.rar m[f] C:\Temp\Summa_*.tab C:\Temp\Reg_*tab
В итоге на выходе имеем архив с именем archive_agYYYY-MM-DD-HHMMSS.rar, как вы наверное уже поняли, за формирование даты отвечает ключ —agYYYY-MM-DD-HHMMSS, а за обрезание архива ключ —v2500. Если в сжатом виде, размер превысит 2500 КБ, то будет создано 2 файла с именами:
archive_ YYYY-MM-DD-HHMMSS.part01.rar
archive _ YYYY-MM-DD-HHMMSS.part02.rar
Теперь необходимо отправить архивы на почту. Для этого запустим цикл:
FOR %%i IN («C:\Temp\archive_2014*») DO Set FileName=%%i
Set NName=%FileName:~8,23%
— Переносим файлы, которые мы сжали в папку:
move C:\temp\Summa_*.tab C:\temp\back
move C:\temp\Reg_*.tab C:\temp\back
—Для отправки почты я использовал утилиту sendemail
sendemail -f youraddress@mail.ru -t bazar@mail.ru -u archive_%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2% -m «archive_%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%» -s IP -a «C:\temp\%NName%.rar» -cc tome@mail.ru -xu tlegen -xp 123456
На самом деле, у меня в батнике данные строки прописаны несколько раз, т.к. бывают случаи когда архивов создается 2,3 или даже 4, вы тоже можете поместить нижеприведенный код:
sendemail -f youraddress@mail.ru -t bazar@mail.ru -u archive_%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2% -m «archive_%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%» -s IP -a «C:\temp\%NName%.part01.rar» -cc tome@mail.ru -xu tlegen -xp 123456
ping server –n 10
sendemail -f youraddress@mail.ru -t bazar@mail.ru -u archive_%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2% -m «archive_%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%» -s IP -a «C:\temp\%NName%.part02.rar» -cc tome@mail.ru -xu tlegen -xp 123456
Если вы заметили, 2 команды я разделил командой ping server –n 10, это делается для того, чтобы создать интервал между командами. Пинговать можно компьютер с которого производится отправление файлов.
вкратце поясню значение ключей, которые я использовал:
-f youraddress@mail.ru – в поле От кого будет записан этот адрес
-t bazar@mail.ru – это поле Кому отправить письмо
-u Тема сообщения
-m Тело сообщения
-s SMTP сервер
-a Вложение
-cc Скрытая копия
-xu Имя пользователя для авторизации на сервере
-xp Пароль
— Напоследок переносим отправленный архив в другую папку, чтобы не отправлять его заново.
move c:\temp\archive_*.rar c:\temp\back
Здравствуйте! попытался ваш код адаптировать под свои нужды не получается помогите , что не так?
FOR %%i IN («D:\Мои документы\Desktop\Рабочие файлы\мини.xlsx») DO Set FileName=%%i
‘Set NName=%FileName:~8,23%
sendemail -f assei@mail.ru ‘//-f в поле От кого будет записан этот адрес
-t 89158838811ddp@mail.ru ‘//-t это поле Кому отправить письмо
-u письмо ‘//-u Тема сообщения
-m «мини» ‘// -m Тело сообщения
-s smpt.mail.ru ‘// -s SMTP сервер
-a «D:\Мои документы\Desktop\Рабочие файлы\мини.xlsx» ‘//-a Вложение
-cc 89158838811ddp@mail.ru ‘//-cc Скрытая копия
-xu assei ‘//-xu Имя пользователя для авторизации на сервере
-xp здесь пароль от почты assei@mail.ru ‘//-xp Пароль