Описание работы скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Подключаемся к почтовому серверу(IMAP). Проверяем входящие и все прочтённые письма складываем в папку read. Все вложения из писем оправляем на шару Настройка: <pre class="lang:default decode:true "> 0) ставим apt-get install libnet-imap-simple-ssl-perl libmailtools-perl ripmime smbclient 1) создаем пользователя adduser parse 2) входим под юзакаом su parse 3) переходим в домашний каталог cd ~ 4) создаем файлы и каталог res touch mailattach.pl public mkdir res 5) nano /home/parse/mailattach.pl --------------------------------- много букв, смотрим содержимое внизу Скрипт mailattach.pl --------------------------------- 6) nano /home/parse/public -------------------------- username = parse password = Password_User domain = Name_server -------------------------- 7) расписание Каждые 5 минут запускать скрипт crontab -e */5 * * * * /home/parse/mailattach.pl |
Скрипт mailattach.pl:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#!/usr/bin/perl # mailattach.pl use strict; use warnings; use Net::IMAP::Simple; use Mail::Header; # для крона - переходим в директорию локации скрипта $0=~/^(.+[\\\/])[^\\\/]+[\\\/]*$/; my $cgidir= $1 || "./"; chdir $cgidir; # Чистим res system ("/bin/rm -rf res/*"); # параметры windows ресурса my $SMBSERVER="//server_name"; # имя сервера my $SMBSHARE="/folder_share"; # имя общего ресурса на сервере #my $SMBDIR="xml"; # папка, в которую будем выкладывать вложения ## параметры почтового ящика my $mailhost = "mail.server.ru"; my $mailuser = 'parse@server.ru'; my $mailpass = 'SUperPassWORD'; my $mailfolder = "INBOX"; # папка, в которой проверяем почту my $mailNewFolder = "read"; # папка, в которую перекладываем прочтенные письма # создаем подключение к серверу my $imap = Net::IMAP::Simple->new( $mailhost, port => 143, use_ssl => 0, debug => 0, ) || die "Unable to connect to IMAP: $Net::IMAP::Simple::errstr\n"; if(!$imap->login($mailuser,$mailpass)){ print STDERR "Login failed: " . $imap->errstr . "\n"; exit(64); } # Читаем входящие сообщения my $nm = $imap->select($mailfolder); # Последователь проходим по списку сообщений for(my $i = 1; $i <= $nm; $i++){ # Получаем список служебных заголовков письма my $header = $imap->top($i); # Разбиваем заголовки на отдельные составляющие my $head_obj = Mail::Header->new($header); # по теме письма формируем имя директории для сохранения вложений my $dir = $head_obj->get('Subject'); # удаляем все не словарные символы, # для исключения проблем с созданием папок в windows #$dir =~ s/\W+//g; с длинными именами в заголовке будут проблемы. #будем генерировать рандомные имена папок $dir = rand; # Сохраняем текущее сообщение в файл open MSGFILE,"> res/msg" or die "Couldn't open file: \n"; print MSGFILE @{ $imap->get($i) }; close MSGFILE; # перемещаем сообщение в папу обработанных # если папка для перемещения не создана письмо будет только удалено $imap->copy($i,$mailNewFolder); $imap->delete($i); # разбираем письмо на вложения system ("/usr/bin/ripmime","-ires/msg","-dres/$dir"); # копируем файлы на ресурс windows # переходим в папку с вложениями chdir "res/".$dir or die "Can't cd $!\n"; # prompt - необходим, что бы не подтверждать копирование каждого файла в команде mput # в моем случае копируются все вложения my $SMBCMD="prompt;mput *;exit"; system ("/usr/bin/smbclient","$SMBSERVER$SMBSHARE","-A../../public","-c$SMBCMD"); chdir "../../"; } # Закрываем подключение к imap серверу $imap->quit; # чистим директорию с временными файлами system ("/bin/rm -rf res/*"); exit 0; |