powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / POP3 через UTL_TCP
4 сообщений из 4, страница 1 из 1
POP3 через UTL_TCP
    #32114616
dimaloz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди подскажите кто сталкивался :
Необходимо забирать почтовые сообщения (до 5 Мбт) и запихивать их
в БД (Oracle 9.2) там разбираться с ними. И также отправлять из БД на почтовый сервер .
Но с отправкой все вроде бы понятно (job - utl_smtp).
ВОПРОС: стоит ли сделать POP3 через utl_tcp в БД
или делать внешнее приложение (сервисом скорей всего) ???
...
Рейтинг: 0 / 0
POP3 через UTL_TCP
    #32114825
Zhurbenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
думаю это поможет:
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;
...
Рейтинг: 0 / 0
POP3 через UTL_TCP
    #32115206
dimaloz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Re: POP3 через UTL_TCP
Zhurbenko спасибо за пример , но я вообще имел ввиду
работу UTL_TCP пакета в Oracle в принципе(скорость, надежность). Как бы поступили вы ?
...
Рейтинг: 0 / 0
POP3 через UTL_TCP
    #32115317
Саша Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая штука iFS. там все внутри и pop & imap & smtp. + xml...
все девять ярдов! ставь её (очень надежна и крута), получишь сообщенипя по smtp и делай сними что хошь...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / POP3 через UTL_TCP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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