Надсилання з сервера листів із вкладеннями

Отже завдання наступне - якщо на сервер камера завантажила нові знімки - переслати кілька мені на пошту. Для вирішення цього завдання я написав наступний скрипт: $ cat monitoringscript.sh #!/bin/bash # Declare variables. declare -i DefaultTime=10003 tempCurrentTime=`date +%H%M` CurrentTime=`echo "1$tempCurrentTime"` declare -i NumberToSend=0 FileToSend=" Null" FuleToSendFullPath="Null" declare -i DefaultNumberOfFiles=`find /home/camerahome/snapshots/FI9821P_00626E55E3A3/snap -type f wc -l`

while [ $DefaultTime -le $CurrentTime ] do CurrentNumberOfFiles=`find /home/camerahome/snapshots/FI9821P_00626E55E3A3/snap -type f wc -l` if [ $CurrentNum 3>then sleep 60 elif [ $CurrentNumberOfFiles -gt $DefaultNumberOfFiles ] then NumberToSend=$(( ( $CurrentNumberOfFiles - $DefaultNumberOfFiles ) /> 2 ) ls -t /home/camerahome/snapshots/FI9821P_00626E55E3A3/snap` ) FileToSend=$ FuleToSendFullPath=`echo "/home/camerahome/snapshots/FI9821P_00626E> 3># echo -e "\n Це вхідний пункт CurrentNumberOfFiles=$CurrentNumberOfFiles >= DefaultNumberOfFiles=$DefaultNumberOfFiles ; NumberToSend=$NumberToSend ; FilesNamesArray$$ endFullPath=$FuleToSendFullPath" # end of debug DefaultNumberOfFiles=$CurrentNumberOfFiles mutt -s "HomeCamera is reporting - MovementDetected, see attachment" МойМейл@bk.ru -a $FuleToSendFullPath /home/camerahome/snapshots 30 fi tempCurrentTime=`date +%H%M` CurrentTime=`echo "1$tempCurrentTime"` done

exit 0 За замовчуваннямЦей скрипт щохвилини перевіряє наявність нових файлів (можна зробити і частіше). Якщо є нові файли – надсилає листа, якщо файлів немає – чекає наступну хвилину. Оскільки я ще не навчився робити сервіси - я зробив скрипт, який запускається по крону і працює в фоні. Для того щоб уникнути будь-яких збоїв, якщо, наприклад, скрипт зависне, припинить роботу з якоїсь причини – у кроні передбачений автоматичний запуск скрипту щоночі, а скрипт сам себе зупиняє за кілька хвилин до свого перезапуску. Я зробив це вночі – тому що вночі я найменше чекаю отримання будь-яких даних з камери – я практично завжди вночі вдома та камера нічого не фіксує.

Якщо скрипт визначив, що потрібно надсилати листа, то потрібно зрозуміти який знімок потрібно відправляти - надсилати найновіший знімок неправильно. Там зазвичай нічого немає - рух вже закінчився або об'єкт вже виходив з кадру - шматок руки, голови або тп отримувати не має сенсу - найправильніше відправити якийсь знімок із середини нових файлів. Наприклад, було десять файлів, стало 20 – отже, потрібно відправити 15й. Це здійснюється наступною конструкцією з використанням списків ' FilesNamesArray '. Оскільки файли сортуються від найновішого, виходить зворотний підрахунок, тому відправляється не 15, а 5 файл (зворотний порядок). Далі вибраний файл передається утилітіmutt, вона відправляє лист заздалегідь заданому одержувачу.

Установкаmutt дуже проста, перейде відразу до налаштування. Налаштування зберігаються індивідуально для кожного користувача у його домашньому каталозі. Ось приклад моїх налаштувань - вміст файлу налаштувань так само є в пості в мене на сайті $ cat

/.muttrc set imap_user = "UserNamegmail.com" set imap_pass ="YourAccountPassword"

#set smtp_url = "smtp://UserNamesmtp.gmail.com:587/" set smtp_url = "smtps://[email protected]:465/" set smtp_pass = "YourAccountPassword " set from = "UserNamegmail.com" set realname = "Alexander Yakovlev"

#To use TLS ви повинні відповісти також про наступні напрямки: set ssl_starttls=yes set ssl_force_tls=yes

set folder = "imaps://imap.gmail.com:993" set spoolfile = "+INBOX" set postponed="+[Gmail]/Drafts"

/.mutt/cache/headers set message_cachedir=

/.mutt/cache/bodies set certificate_file=