powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / прием почты
25 сообщений из 37, страница 1 из 2
прием почты
    #32760324
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возник такой вопрос
как лучше сделать автоматический прием и анализ почты на Linux RedHat, чтоб от определенных отправителей все складывалось в отдельный файл,а затем еще и разбирало сообщение, т.е текст сообщения в текстовом виде в файл, а вложенные файлы сохроняло отдельно ( для их , скажем, дальнейшей обработки ) ?
Ну , первым делом приходит мысль об исп-ии fetchmail, кот. можно запустить демоном. А дальше как то разбирать уже локальное хранилище....
...
Рейтинг: 0 / 0
прием почты
    #32760426
Фотография Adekamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну начнем стого - что неописан какой MТA - те почтовик
у меня , к примеру qmail, соответственно я входящую почту могу чекить парсить итд как мне угодно через перенаправление |
а fetchmail это всего лишь агент осушествляющий локальную доставку - те залогинился на сервак провайдера (вдруг до меня что не дошло и упало на младший мх - мх-провайдера) и передать это МТА или прям локальному пользователю. Если же тебе нало просто разбирать локальную почту - то тебе все равно придется писать на каком то языке толи перл - толи питон
вот в питоне например есть замечательный модуль rfc822 к примеру так что все в твоих руках.
...
Рейтинг: 0 / 0
прием почты
    #32760568
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня тоже интересует тот вопрос. Мне надо забирать с почтового ящика сообщения с конкретним сабджектом и складивать где-то атачменти.
...
Рейтинг: 0 / 0
прием почты
    #32760591
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну собств. да, интересует разбор почты
perl и питон я незнаю, недолжно быть так все сложно ...
ну, пока что такие мысли
1. значит настроив fetchmail + procmail у меня почта попадает допустим в файл $HOME/Mail/default
2. по cron запускается shell scipt который разгребает этот уже локальный ящик default

суть работы скрипта будет просмотреть заголовки писем напредмет отправителя и для его сообщений сбросить вложенные файлы в определенный каталог
для парсинга думаю может хорошо подойти стандартная программка nail http://nail.sourceforge.net/

так командой
Код: plaintext
nail -f default < /dev/null | grep @ | awk '{ print $2,$3}'
получаем номер сообщения и отправителя
допустим нам подходит 1-ое сообщение, тогда делаем
Код: plaintext
echo w  1  body | nail -f default
при этом текст сообщения сбрасывается в файл body, а вложенные файлы появляются в каталоге под своими именами
далее играем командами cp ..
и ящик можно очистить
Код: plaintext
>$HOME/Mail/default

как вам такая идея?
...
Рейтинг: 0 / 0
прием почты
    #32761265
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можна подробней о nail
Я с помощью fetchmail перенаправил почту юзеру oracle
затем из под oracle-а делаю
Код: plaintext
echo w  1  body | nail -f 
и сначала получал сообщения что нету файла mbox
Создал ему таой фалй теперь получаю
Код: plaintext
1.
2.
3.
 $ echo w  3  body | nail -f     
mailx version nail  11 . 13   10 / 27 / 04 .  Type ? for help.
"/home/oracle/mbox":  0  messages                     
No applicable messages. 
...
Рейтинг: 0 / 0
прием почты
    #32761329
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так это скорее не в nail дело
nail это тот же mail
вообще так бы и простой mail подошел, только он вложения не отделяет, да и у nail ключей поболее ...
а у вас fetchmail точно почту принимает?
если он принимает, то возможно не в /home/oracle/mbox, а в /var/spool/mail/oracle
...
Рейтинг: 0 / 0
прием почты
    #32761399
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fetchmail точно почту принимает и принимает ее в /var/spool/mail/oracle
...
Рейтинг: 0 / 0
прием почты
    #32761410
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда наберите
nail -H
должно показать заголовки писем
ключ -f нужен только если ящик в другом месте
...
Рейтинг: 0 / 0
прием почты
    #32761421
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanek842тогда наберите
nail -H
должно показать заголовки писем

Показало, а как мне атачменти записать куда надо?
...
Рейтинг: 0 / 0
прием почты
    #32761433
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
echo w * bodyfile | nail

в текущем каталоге появятся все вложенные файлы из всех писем , а в файл bodyfile свалит все тела сообщений
...
Рейтинг: 0 / 0
прием почты
    #32761453
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все правильно, fetchmail должен забирать сообщения с серверов, но затем нет смысла складывать это куда-то. У fetchmail есть настройка, чтобы он скармливал, то что получил определенной порграмме или MTA.
Типа

poll pop.mail.ru with proto POP3 user 'hren' there with password 'hren0vipassword' is 'hren' here mda /usr/bin/procmail

Тут полученные сообщения скармливаются procmail-у для дальнйшей доставки. Вы можете скармливать их _своей_ самодельной пограмме, которая будет делать что-то с сообщением (разбирать складывать или что еще хотите), а потом доставлять в ящик, или еще проще вызывать procmail и отдавать ему что надо на доставку.


В качестве базы для "своей" программы я бы порекомендовал python потому что у него хорошие средства разбора почтовых сообщений в стандартной бибке или perl (потому что на CPAN можно найти что хошь)
...
Рейтинг: 0 / 0
прием почты
    #32761470
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче я немного понял
так я получаю номер нужного письма
Код: plaintext
nail -H  |grep winrar |awk '{print $2}'
а так
Код: plaintext
echo w  4  body |nail
записиваю атачмент куда надо.
А вот как мне номер нужного письма передать?
На сколько я понял ето будет скрипт 2-3 строчки но сам написать их немогу, я новичок в етом деле
...
Рейтинг: 0 / 0
прием почты
    #32761506
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanek842echo w * bodyfile | nail

в текущем каталоге появятся все вложенные файлы из всех писем , а в файл bodyfile свалит все тела сообщений
Так не пашет матерится вот так
Код: plaintext
1.
2.
 O   4  Yura Fedorchuk     Fri Oct  29   15 : 35   19585 / 1427796  winrar
No applicable messages from {Tree, history, ini, tmp}         
Held  4  messages in /var/spool/mail/oracle 
И еще какой ключ добавть чтоб тот фал которий оприходовал удалить с почтового ящика.
...
Рейтинг: 0 / 0
прием почты
    #32761555
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сделал так
Код: plaintext
1.
echo w  1  body |nail    
echo d  1  |nail 

Буду по одному письму обрабативать и срасу же его удалять
...
Рейтинг: 0 / 0
прием почты
    #32761585
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Stepan_mk
- No applicable messages похоже пишет когда вложенные файлы уже существуют на диске ...
- удалить все похоже можно так echo d*\nq | mail
- скрипт можно примерно такой сделать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#!/bin/bash
# fetchmail -k
cd msg
nail -H | awk 'NR<100 {print $0}' | while read s; do
PR=`echo $s | grep -i winrar | wc -l`
#PR= 1  # for test
N=`echo $s | awk '{print $2}'`
SENDER=`echo $s | awk '{print $3}'`
if [ $SENDER == "sanek842@mail.ru"  -a  $PR !=  0  ]
 then
#echo w $N body | nail
  echo $PR $N $SENDER
fi
done

вы меня спрашиваете, я сам то буквально сегодня это раскопал

вообще интересно было бы увидеть еще какие-нибудь варианты ...

to Хрен
а вы можете привести какие-нибудь ссылки по разбору почты ( пусть на том же perl )?

P.S.
хотя с nail вроде тоже ниче ...
...
Рейтинг: 0 / 0
прием почты
    #32761679
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, и еще мысли по удалению
я бы не стал автоматизировать удаление почты, пускай складируется локально у пользователя, в данном случае oracle. А то если что то где то не отработает , потом звони-запрашивай архив снова ....

Либо ручками (все проверив), либо после обработки принятых файлов ( допустим уверен что загрузка в базу прошла без ошибок )

P.S.
все, пора домой :)
...
Рейтинг: 0 / 0
прием почты
    #32765312
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanek842да, и еще мысли по удалению
я бы не стал автоматизировать удаление почты, пускай складируется локально у пользователя, в данном случае oracle. А то если что то где то не отработает , потом звони-запрашивай архив снова ....

Либо ручками (все проверив), либо после обработки принятых файлов ( допустим уверен что загрузка в базу прошла без ошибок )

P.S.
все, пора домой :)
Я после обработки буде файл копировать в архив где оно будет лежать некоторое время
У меня еще такой вопрос
У меня уже есть тот файл записан на диске, я написал скрипт такой
Код: plaintext
1.
2.
3.
 ls -l|grep ???_??????_*.rar|awk '{print $9}' | while read s; do
 echo $s                                                                  
 rar_static x $s
imp ...<здесь надо написать $s только вместо .rar .dmp> 
...
Рейтинг: 0 / 0
прием почты
    #32765483
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока што застрял на таком
кОГДА ЗАПУСКАЮ СКРИПТ:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
#!/bin/bash 
FROMUSER="SENDER_DATA"
${ORACLE_HOME}/bin/sqlplus /nologging << !EOF
 ! echo "start"
  connect internal
! ls -l|grep ???_??????_??????????*.rar|awk '{print $9}' | while read s; do 
! echo $s 
  begin RECIVER.UPDATE_SCHEMA.checkfile($s,$DT,$CREM,$OD); end; 
  /     
! echo $CREM 
! done 
!EOF    
В РЕЗУЛЬТАТЕ ПОЛУЧАЮ
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
$ ./test.bsh                                            
                                                                               
SQL*Plus: Release 8.1.7.0.0 - Production on Tue Nov 2 17:08:08 2004            
                                                                               
(c) Copyright 2000 Oracle Corporation.  All rights reserved.                   
                                                                               
SQL> start                                                                     
                                                                               
SQL> Connected.                                                                
SQL> /bin/bash: -c: line 2: syntax error: unexpected end of file               
                                                                               
SQL>                                                                           
                                                                               
SQL> SQL>   2    3    4    5    6    7    8    9   10   11   12   13   14   15 
 16  Disconnected from Oracle8i Enterprise Edition Release 8.1.7.4.0 - Producti
n                                                                              
JServer Release 8.1.7.4.0 - Production                                         
Press any key to continue...
Пробовал вместо ! done писать просто done но все равно не катит
...
Рейтинг: 0 / 0
прием почты
    #32765843
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вопервых
ls -l|grep ???_??????_*.rar|awk '{print $9}'
можно переписать проще
ls -1 ???_??????_*.rar ( ls c ключем единичка - list one file per line )

что касается скрипта test.bsh , обычно завертывается sql в sh, а не наоборот
пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#!/bin/bash
for f in *.txt; do
echo -n FILE :
{ sqlplus -s scott/tiger <<!
  set serveroutput on feedback off pages  0 
  begin
   dbms_output.put_line('$f');
  end;
/
!
}
done

если хотите получить список файлов за один вызов sqlplus , то алгоритм такой
- в sh сохранение списка в файл
- а в блоке plsql через пакет utl_file

P.S.
короче уже oracle попер
...
Рейтинг: 0 / 0
прием почты
    #32765953
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanek842
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#!/bin/bash
for f in *.txt; do
echo -n FILE :
{ sqlplus -s scott/tiger <<!
  set serveroutput on feedback off pages  0 
  begin
   dbms_output.put_line('$f');
  end;
/
!
}
done


Попробовал и получил
Код: plaintext
1.
2.
$ ./test2.bsh
./test2.bsh: line  15 : syntax error: unexpected end of file
$
...
Рейтинг: 0 / 0
прием почты
    #32765977
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так может выдавать если на 15-ой строке знак ! стоит несначала строки
...
Рейтинг: 0 / 0
прием почты
    #32766223
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и раз уже оракл попер то еще такая загвоздка теперь
Я визиваю процедуру которая через OUT параметри мне должна что-то повернуть в скрипт что-то вроде того
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
#!/bin/bash
OD= 1                                                                       
{  ${ORACLE_HOME}/bin/sqlplus -s /nologging << !EOF                       
  ! echo "start"                                                          
  connect internal                                                        
  set serveroutput on feedback off pages  0                                 
DECLARE
ODD number;
begin RECIVER.UPDATE_SCHEMA.checkfile('${s}'ODD);
{OD}=ODD; -- вот тут незнаю как сделать
end;
/    
...
Рейтинг: 0 / 0
прием почты
    #32766511
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вернуть значение можно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#!/bin/bash
PR=`{ sqlplus -s scott/tiger <<!
set serveroutput on feedback off pages  0 
declare
 ODD number;
begin
ODD:= 0 ;
dbms_output.put_line(ODD);
end;
/
!
}`

echo $PR

еще про nail
тут покопался, неплохой вариант подобрал
Код: plaintext
1.
2.
3.
4.
fetchmail >/dev/null  2 >& 1 
K=`nail -H  2 >/dev/null | wc -l`
echo Total messages $K
[ $K -ne  0  ] && echo w  1 -$K body | nail
после отработки данного скрипта все вложенные файлы "вынутся" в тек дир-ий
далее можно писать другие скрипты - на обработку

Stepan_mk, а опишите полностью вашу задачу, кот вы реализовываете, и зачем эта RECIVER.UPDATE_SCHEMA.checkfile ( что она делает )?
...
Рейтинг: 0 / 0
прием почты
    #32770253
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanek842
Stepan_mk, а опишите полностью вашу задачу, кот вы реализовываете, и зачем эта RECIVER.UPDATE_SCHEMA.checkfile ( что она делает )?

Задача у меня такая. Я когда-то давно написал репликацию ораклових серверов 27=>1 методом: сбор данний, експорт, отправка почтий, прийом почти, імпорт, репликация. Раньше главний сервак бил по віндой, для него я написал программу на Делфи которая принимала почту проверяла порядк файли если все ОК то импортировала в временную схему и запускала процес репликации. Потом я перешел на линукс и пришла необходимость пепреписать ту програмку на линуксе.
RECIVER.UPDATE_SCHEMA.checkfile проверяет не устарел ли файл что пришел почтой
...
Рейтинг: 0 / 0
прием почты
    #33008767
Stepan_mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой-то глючок проскакиевает. Немогу виловить. Вот исходник маленього скрипта.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
#!/bin/bash                                
cd /home/oracle/reciver/                   
fetchmail -s -K                            
nail -H |awk '{print $2}'| while read s; do
#echo $s                                   
echo w $s body |nail                       
done                                       
rm body                                    
nail -H |awk '{print $2}'| while read s; do
echo d  1  |nail                             
done                                       
/home/oracle/reciver/test.bsh 

Что он должен делать:
1. Ферчит почту з другого сервака ОК
2. Читает почту и записивает файл что в атачменте на диск, а текст письма в файл body. Здесь какраз и проблемка. почемуто не все сообщения обрабативаются.
3. Удаляется каждое сообщение
4. запускается скрипт на обработку файлов.
Как мне виловить ошиПку в пункте 2.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / прием почты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]