Автоматизированная загрузка файлов на FTP и отправка файлов на электронную почту

  Понадобилось мне ежечасно отправлять файлы отчетов на FTP сервер и также дублировать отправку этих файлов в почту нескольким адресатам. После недолгих изысканий остановился на встроенной утилите ftp.exe (C:\Windows\System32\ftp.exe) и старом добром blat. Итак начнем. Нам надо ежечасно загружать все XML файлы с директории %dir%\file_export (где %dir% путь к нашей папке) на сервер ftp.server.com.
Новая версия на Python

Далее первая версия выгрузки.
Настраиваем выгрузку файлов на FTP
Создаем файл команд для ftp.exe
Создаем текстовый документ (например ftpcomm.txt) в нем прописываем:
login
password
cd IN
binary
mput C:\%dir%\file_export\*.xml   
bye
где:
login  - логин ftp сервера
pasword - пароль на ftp сервер
cd IN  -  переходим в нужную папку
binary - устанавливаем двоичный способ пересылки файлов. При этом файл при передаче не перекодируется и записывается в неизмененном виде. Это наиболее надежный способ передачи файлов.
mput C:\%dir%\file_export\*.xml - копируем один или несколько локальных файлов на удаленный компьютер с указанием директории
bye   - конец FTP сессии и выход с FTP сервера
Создаем файл export.bat
В нем прописываем:
C:\WINDOWS\system32\ftp.exe -s:c:\%dir%\ftpcomm.txt -i ftp.server.com
где:
C:\WINDOWS\system32\ftp.exe - Путь к утилите ftp.exe
-s:c:\%dir%\ftpcomm.txt - задаем путь к  текстовому файлу содержащим команды FTP, команды будет автоматически запускаться после старта FTP.
-i  - отключение интерактивного режима при передаче нескольких файлов.
ftp.server.com - прописываем адрес нашего FTP cервера.
Проверяем работу запустив export.bat. Видим что файлы выгрузились на FTP сервер. Но тут возникает проблема, если нам надо выгружать файлы раз в час то как исключить повторное отправление файлов? Решение банальное:
В файл export.bat дописываем :
cd /d C:\%dir%\file_export\
del *.xml
где:
cd /d C:\%dir%\file_export\ - переходим в директорию в которой хранятся файлы XML.
del *.xml  - удаляем все файлы XML.
Настраиваем отправку файлов на электронную почту
Для отправки файлов на почту используем утилиту blat (http://www.blat.net/). Скачиваем и Распаковываем в любой каталог, в нашем случае это c:\%dir\blat/
Установка blat. Вызываем командную строку. В командной строке переходим к нашей папке:
cd c:\%dir%\blat/
Запускаем установку blat (прописываем профиль blat в реестр, данные прописываются в реестр системы Windows в ветку: [HKEY_LOCAL_MACHINE\SOFTWARE\Public Domain\Blat\имя профиля]. 
blat.exe -install smtp.yandex.ru Имя_ящика@yandex.ru 3 25 profile Имя_ящика@yandex.ru Ваш_Пароль
Где:
smtp.yandex.ru - имя почтового сервера, через который будет выполняться отправка электронных писем.
Имя_ящика@yandex.ru - имя отправителя, которое будет отображаться в поле.
3 - число попыток повторный отправки письма при сбое соединения с сервером.
25 - номер порта SMTP-сервера.
profile - имя профиля.
Имя_ящика@yandex.ru - имя пользователя, которое будет использоваться при подключении к SMTP-серверу.
Ваш_Пароль - пароль, используемый при подключении к SMTP-серверу, т.е. пароль к почтовому ящику.
Добавление отправки писем в export.bat
В файл export.bat после строчки
C:\WINDOWS\system32\ftp.exe -s:c:\%dir%\ftpcomm.txt -i ftp.server.com
Прописываем:
blat.exe -p profile -charset windows-1251 -to mail@gmail.com -subject "File export " -body "Auto export" -attach c:\%dir%\file_export\*.xml
где:
-p profile – имя профиля blat (Указывали во время установки)
-charset windows-1251 (Выбираем кодировку Windows)
-to mail@gmail.com – адрес получателя письма
-subject "File export "- Тема письма
-body "Auto export" – Тело письма
-attach c:\%dir%\file_export\*.xml – файлы или файл которые необходимо отправить
Если необходимо отправлять письма на несколько ящиков то прописываем данную строку несколько раз с указанием ящиков получателя:
blat.exe -p profile -charset windows-1251 -to mail@gmail.com -subject "File export " -body "Auto export" -attach c:\%dir%\file_export\*.xml
blat.exe -p profile -charset windows-1251 -to mail@yandex.ru -subject "File export " -body "Auto export" -attach c:\%dir%\file_export\*.xml
blat.exe -p profile -charset windows-1251 -to mail@mail.ru -subject "File export " -body "Auto export" -attach c:\%dir%\file_export\*.xml
Конечный файл export.bat
В итоге мы получаем файл export.bat в котором имеем строки:
C:\WINDOWS\system32\ftp.exe -s:c:\%dir%\ftpcomm.txt -i ftp.server.com
blat.exe -p profile -charset windows-1251 -to mail@gmail.com -subject "File export " -body "Auto export" -attach c:\%dir%\file_export\*.xml
cd /d C:\%dir%\file_export\
del *.xml
В первой строке отправляем файлы на FTP сервер, во второй отправляем файлы электронной почтой, далее переходим в директорию где хранятся файлы и удаляем их.
Отправление файлов по расписанию
Напомню что нам необходимо отправлять файлы ежечасно, для этого создаем задачу в планировщике Windows. Где указываем что нам необходимо раз в час запускать export.bat.
Итог
В итоге мы имеем автоматизированную систему ежечасной отправки файлов на FTP сервер и электронную почту.

Комментарии

  1. А если нужна отправка онлайн? на фтп скинули файл и он тут же должен улететь на почту? Что тогда?

    ОтветитьУдалить
  2. а щедулер настроить на 2-5 минут вера не позволяет?

    ОтветитьУдалить
  3. Русские символы коверкает при загрузке на фтп

    ОтветитьУдалить
  4. Авто-загрузка файлов (авто-бэкапов, архивов и не только) на FTP с контролем удаления последних файлов. Надежная защита от вирусов-шифровальщиков, случайного удаления свежих файлов, повреждения жесткого диска.
    https://backupfilestoftp.1s-programmist-expert.ru

    ОтветитьУдалить
  5. Спасибо, но непонятно как задать адресс фтп сервера
    C:\WINDOWS\system32\ftp.exe -s:c:\%qbittt%\siusk.txt -i 66.66.0.0:45894

    Так вводил и никакого эффекта

    ОтветитьУдалить
  6. Если нужен вход по FTP с нестандартным портом, то IP и порт указывайте не в командной строке Windows, а в команде open в первой строке вашего файла сценария siusk.txt, то есть:
    C:\WINDOWS\system32\ftp.exe -s:c:\%qbittt%\siusk.txt -i
    а в siusk.txt:
    open 66.66.0.0 45894
    login-name
    password
    и т.д.

    ОтветитьУдалить
  7. Добрый день!
    Спасибо за инструкцию. Почти работает, но почему-то файлы передаются с размером 0, а при выполнении bat-файла происходит ошибка
    200 PORT command successful
    425 Unable to build data connection: Connection refused
    В чем может быть проблема ? Брандмауер и антивирус отключен.
    Спасибо

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения