Отправляем почту с вложением из командной строки Windows

В общем сразу к делу. Дано:

  1. Мне приходит почта и все вложения автоматически складываются в одну папку.
  2. Всё…

Надо:

  1. Упаковать  файлы с определенным расширением в архив
  2. Отправить по определенному адресу электронной почты.
  3. Повторить каждый день

Задача очень простая, но зачем мне этим заниматься, если за меня может поработать компьютер, верно? Сначала собирался использовать nncron, или xstarter.. Но nncron плохо работал на семерке и выше, а xstarter для  такой задачи я посчитал слишком тяжелым, да и не нравится мне он. Тут же было решено состряпать батник на скорую руку:

Создаем папку “d:\auto“, внутри создаем наш батник (пока что пустой): d:\autotoOrg.cmd, который будет делать за нас работу. Все вложения у меня собираются в папку d:\mailin. Для начала мне нужно взять файлы с расширениями 582, 583, 584, 585 и т д.., заархивировать, имя архива должно содержать текущий день и месяц.

Создадим папки для работы батника:

D:\autoorg

В эту папку будем складывать входящие файлы:

D:\autoorgreestr

Здесь файлы будут помещены в архив:

D:\autoorgorgout

А сюда будем скидывать уже отправленные файлы.. Так на всякий случай. Люблю когда есть копии:

D:\autoorgorgarch

Собственно поехали наполнять батник.. Почему то я ему сделал расширение cmd, но на результат это не повлияет:

move /Y d:\mailin*.648 d:\autoorgreestr
move /Y d:\mailin*.583 d:\autoorgreestr
move /Y d:\mailin*.584 d:\autoorgreestr
move /Y d:\mailin*.585 d:\autoorgreestr
move /Y d:\mailin*.582 d:\autoorgreestr
move /Y d:\mailin*.636 d:\autoorgreestr
move /Y d:\mailin*.414 d:\autoorgreestr
move /Y d:\mailin*.614 d:\autoorgreestr
move /Y d:\mailinr*.639 d:\autokabarh
move /Y d:\mailinr*.ost d:\autokabarh
move /Y d:\mailin*.639 d:\autokab
move /Y d:\mailin*.ost d:\autokab
move /Y d:\autokabr* d:\autokabarch

Пока думал в задачу добавились новые файлы, поэтому включил их в командный файл. Вообще по-хорошему лучше создать переменные, но мне что то лениво. Следующий шаг – архивация. Здесь я решил защиту от дурака сделать небольшую, чтобы не уходили архивы кусками, а именно – батник ничего не будет делать до 17-00. Реализуется очень просто – получаем текущее время, если час меньше 17, то ничего не делаем:

set day=%date:~0,2%
set month=%date:~3,2%
set hour=%time:~0,2%
if %hour% GTR 17 (

Ну вот, пора архивировать:

if exist d:\autoorgreestr*01*.* d:\auto7za.exe -tzip a d:\autoorgoutorg%day%%month%.zip d:\autoorgreestr*.*
if exist d:\autoorgoutorg%day%%month%.zip del /Q d:\autoorgreestr*.*

В качестве архиватора я использую бесплатный 7-zip, который скачал с одноименного сайта. В первом условии я проверяю, есть ли вообще какие то файлы для архивации, если есть, то архивируем. Вторая команда удаляет исходные файлы, если существует архив.

Файлы упаковали, пришло время отправлять. Для отправки я нашел два интересных решения – mailsend и cmail. Т.к. файлы мне нужно отправлять уже по двум адресам, то использовать я буду обе программы, чисто для эксперимента. Заранее скажу, что mailsend всем хорош, кроме одного – он не умеет отправлять файлы из папки по маске, с чем отлично справляется cmail. Из примеров на сайтах этих программ и из подсказок в командной строке сформировал команды для отправки:

if exist d:\autoorgoutorg%day%%month%.zip d:\automailsend1.18.exe -smtp smtp.gmail.com -port 465 -t poluchatel@gmail.com +cc +bc -f otpravitel@gmail.com -ssl -auth -user otpravitel@gmail.com -pass password -q -attach "d:\autoorgoutorg%day%%month%.zip" -sub "Отчет от наших к вашим" -M "Здесь сообщение, которое будет отображаться в письме"
rem echo "Результат: %errorlevel%"
if ERRORLEVEL 0 move /Y d:\autoorgout*.* d:\autoorgarch
if exist d:\autokab*.639 d:\autocmail.exe -secureport -host:otpravitel@gmail.com:password@smtp.gmail.com:465 -from:otpravitel@gmail.com -to:poluchatel@mail.ru -subject:Отчет_от_наших_вашим_тема "-body:"Сообщение "-awild:\:d:\autokab*.*"
move /Y d:\autokab*.* d:\autokabarch
rem echo "Результат: %errorlevel%"
) ELSE echo Ещё не время отправлять отчеты....

В принципе всё. кидаем тестовые файлы, предварительно указав в качестве получателя собственный адрес, проверяем – всё работает. Кидаем в планировщик задание запускать каждый день часиков в семь и благополучно забываем. Под спойлером полный текст:

@echo off
move /Y d:\mailin*.648 d:\autoorgreestr
move /Y d:\mailin*.583 d:\autoorgreestr
move /Y d:\mailin*.584 d:\autoorgreestr
move /Y d:\mailin*.585 d:\autoorgreestr
move /Y d:\mailin*.582 d:\autoorgreestr
move /Y d:\mailin*.636 d:\autoorgreestr
move /Y d:\mailin*.414 d:\autoorgreestr
move /Y d:\mailin*.614 d:\autoorgreestr
move /Y d:\mailinr*.639 d:\autokabarh
move /Y d:\mailinr*.ost d:\autokabarh
move /Y d:\mailin*.639 d:\autokab
move /Y d:\mailin*.ost d:\autokab
move /Y d:\autokabr* d:\autokabarch
set day=%date:~0,2%
set month=%date:~3,2%
set hour=%time:~0,2%
rem zakat solnca vruchnuy
rem set day=21
rem set month=10
rem set hour=18
if %hour% GTR 17 ( 
if exist d:\autoorgreestr*01*.* d:\auto7za.exe -tzip a d:\autoorgoutorg%day%%month%.zip d:\autoorgreestr*.*
if exist d:\autoorgoutorg%day%%month%.zip del /Q d:\autoorgreestr*.*
if exist d:\autoorgoutorg%day%%month%.zip d:\automailsend1.18.exe -smtp smtp.gmail.com -port 465 -t poluchatel@gmail.com +cc +bc -f otpravitel@gmail.com -ssl -auth -user otpravitel@gmail.com -pass password -q -attach "d:\autoorgoutorg%day%%month%.zip" -sub "Отчет от наших к вашим" -M "Здесь сообщение, которое будет отображаться в письме"
rem echo "Результат: %errorlevel%"
if ERRORLEVEL 0 move /Y d:\autoorgout*.* d:\autoorgarch
if exist d:\autokab*.639 d:\autocmail.exe -secureport -host:otpravitel@gmail.com:password@smtp.gmail.com:465 -from:otpravitel@gmail.com -to:poluchatel@mail.ru -subject:Отчет_от_наших_вашим_тема "-body:"Сообщение "-awild:\:d:\autokab*.*"
move /Y d:\autokab*.* d:\autokabarch
rem echo "Результат: %errorlevel%"
) ELSE echo Ещё не время отправлять отчеты....

Ссылки на используемые инструменты: 7-zip, mailsend, cmail

0 thoughts on “Отправляем почту с вложением из командной строки Windows

  • Если с командной строки письма успешно отправляются, а при помощи php нет, попробуйте поэкспериментировать с четвертым параметром функции mail либо с настройкой sendmail_path, находящейся в файле php.ini

Leave a Reply to Алексей Cancel Reply

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

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>