|
|
|
POP3 через UTL_TCP
|
|||
|---|---|---|---|
|
#18+
Люди подскажите кто сталкивался : Необходимо забирать почтовые сообщения (до 5 Мбт) и запихивать их в БД (Oracle 9.2) там разбираться с ними. И также отправлять из БД на почтовый сервер . Но с отправкой все вроде бы понятно (job - utl_smtp). ВОПРОС: стоит ли сделать POP3 через utl_tcp в БД или делать внешнее приложение (сервисом скорей всего) ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2003, 00:29 |
|
||
|
POP3 через UTL_TCP
|
|||
|---|---|---|---|
|
#18+
думаю это поможет: procedure RETRMail( host_ in varchar2 default '', user_ in varchar2 default '', pass_ in varchar2 default '' ) is type MailRec is record( from_ varchar2(500), subj_ varchar2(500), body_ varchar2(32767), leng_ integer); type MailTableType is table of MailRec index by binary_integer; c utl_tcp.connection; i smallint := 0; nn smallint := 0; z varchar2(32767) := 'none'; MailTable MailTableType; begin c := utl_tcp.open_connection(host_, 110); if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then i := utl_tcp.write_line(c, 'noop'); if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then i := utl_tcp.write_line(c, 'user '||user_); if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then i := utl_tcp.write_line(c, 'pass '||pass_); if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then i := utl_tcp.write_line(c, 'list'); if substr(utl_tcp.get_line(c,true),1,3) = '+OK' then loop z := utl_tcp.get_line(c,true); exit when substr(z,1,1) = '.'; nn := to_number(substr(z,1,instr(z,' ',1))); MailTable(nn).leng_ := to_number(substr(z,instr(z,' ')+1)); end loop; ------------------------------------ for nn in 1..MailTable.count loop i := utl_tcp.write_line(c, 'retr '||nn); i:=0; if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then loop z := utl_tcp.get_line(c); exit when nlssort(z) = '2E0D0A00'; if instrb(z,'From: ')>0 then MailTable(nn).from_ := replace(replace(replace(z,'From: '),chr(13)),chr(10)); end if; if instrb(z,'Subject: ')>0 then MailTable(nn).subj_ := replace(replace(replace(z,'Subject: '),chr(13)),chr(10)); end if; if i=1 then MailTable(nn).body_ := MailTable(nn).body_ || z; end if; if (nlssort(z) = '0D0A00') then i:=i+1; end if; end loop; z := ''; end if; end loop; ------------------------------------ end if; end if; end if; end if; end if; ------------------------------------ for i in 1..MailTable.count loop dbms_output.put_line('From: '||MailTable(i).from_); dbms_output.put_line('Subject: '||MailTable(i).subj_); dbms_output.put_line('Body: '||MailTable(i).body_); dbms_output.put_line('------------------------------------------------------'); end loop; dbms_output.put_line('ALL: '||MailTable.count); ------------------------------------ i := utl_tcp.write_line(c, 'quit'); utl_tcp.close_connection(c); exception when utl_tcp.end_of_input then utl_tcp.close_connection(c); end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2003, 13:40 |
|
||
|
POP3 через UTL_TCP
|
|||
|---|---|---|---|
|
#18+
Re: POP3 через UTL_TCP Zhurbenko спасибо за пример , но я вообще имел ввиду работу UTL_TCP пакета в Oracle в принципе(скорость, надежность). Как бы поступили вы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2003, 22:13 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32114616&tid=1991597]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
149ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 418ms |

| 0 / 0 |
