Изпращане на имейли с прикачени файлове от сървъра
Общо задачата е следната - ако камерата е качила нови снимки на сървъра - прати ми няколко по пощата. За да разреша този проблем, написах следния скрипт: $ cat monitoringscript.sh #!/bin/bash # Деклариране на променливи. declare -i DefaultTime=10003 tempCurrentTime=`date +%H%M` CurrentTime=`echo "1$tempCurrentTime"` declare -i NumberToSend=0 FileToSend="Null" FuleToSendFullPath="Null" declare -i DefaultNumberOfFiles=`fin d /home /camerahome/snapshots/FI9821P_00626E55E3A3/snap -type f wc -l`
докато [ $DefaultTime -le $CurrentTime ] do CurrentNumberOfFiles=`find /home/camerahome/snapshots/FI9821P_00626E55E3A3/snap -type f wc -l` if [ $CurrentNumberOfFiles -eq $DefaultNumberOfFiles ] след това спи 6 0 elif [ $CurrentNumberOfFiles -gt $DefaultNumberOfFiles ] след това NumberToSend=$(( ( $CurrentNumberOfFiles - $DefaultNumberOfFiles ) / 2 )) FilesNamesArray=( `ls -t /home/camerahome/snapshots/FI9821P_0062 6E55E3A3/snap` ) FileToSend=$ FuleToSendFullPath=`echo "/home/camerahome/snapshots/FI9821P_00626E55E3A3/snap/$"` # редове за отстраняване на грешки # echo -e "\n Това е elif раздел CurrentNumberOfFiles=$Cur rentNumberOfFiles >= DefaultNumberOfFiles= $DefaultNumberOfFiles ; NumberToSend=$NumberToSend ; FilesNamesArray=$FilesNamesArray ; FileToSend=$FileToSend ; FuleToSendFullPath=$FuleToSendFullPath" # край на отстраняване на грешки DefaultNumberOfFiles =$CurrentNumberOfFiles mutt -s "HomeCamera отчита - MovementDetected, вижте прикачения файл" [email protected] -a $FuleToSendFullPath /home/camerahome/snapshots/CameraScript_error_log.txt" sleep 30 fi tempCurrentTime=`date +%H%M` CurrentTime=`echo "1$tempCurrentTime"` готово
изход 0 По подразбиранетози скрипт проверява за нови файлове всяка минута (можете да го правите по-често). Ако има нови файлове, изпраща писмо, ако няма файлове, изчаква следващата минута. Тъй като все още не съм се научил как да правя услуги, направих скрипт, който работи на cron и работи във фонов режим. За да се избегнат всякакви повреди, ако например скриптът замръзне, спре да работи по някаква причина - cron осигурява автоматично стартиране на скрипт всяка вечер и скриптът спира сам няколко минути преди да се рестартира. Направих това през нощта - защото през нощта най-малко очаквам да получа някакви данни от камерата - вечер съм почти винаги вкъщи и камерата не снима нищо.
Ако скриптът е определил, че трябва да изпратите писмо, тогава трябва да разберете коя снимка трябва да изпратите - изпращането на най-новата снимка е погрешно. Там обикновено няма нищо - движението вече е приключило или обектът вече е напуснал рамката - няма смисъл да получавате парче от ръка, глава и т.н. - най-правилно е да изпратите някаква снимка от средата на новите файлове. Например, имаше десет файла, сега има 20 - така че трябва да изпратите 15-ия. Това се прави от следната конструкция, използваща списъци ‘ FilesNamesArray ’. Тъй като файловете се сортират от най-новите, се получава обратно броене, така че не се изпращат 15, а 5 файла (обратен ред). След това избраният файл се прехвърля към помощната програмаmutt, която изпраща писмо до предварително определен получател.
Инсталирането наmutt е много лесно, преминете направо към настройката. Настройките се съхраняват индивидуално за всеки потребител в неговата домашна директория. Ето пример за моите настройки - съдържанието на файла с настройки също е в публикацията на моя сайт $ cat
/.muttrc set imap_user = "UserNamegmail.com" set imap_pass =„Парола за вашия акаунт“
#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 = "A лександър яковлев" "
#За да използвате 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=