Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Email средствами pl/SQL  [new]
Dober@Man
Member

Откуда: Магнитогорск
Сообщений: 70
Cotton
Elic
UTL_TCP(FAQ) + RFC1939

а нет ли у кого-то готового кода, чтоб не ваять самому?

---------
Месть - это блюдо, которое нужно подавать холодным.


Присоединяюсь к вопросу....
10 май 06, 14:34    [2647846]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
3aMaHyXa
Guest
type MailRec is record( 
	from_p varchar2(500),
	to_p varchar2(500),	
	subj_p varchar2(500), 
	body_p varchar2(32767), 
	leng_p integer); 
	type MailTableType is 
	table of MailRec index by binary_integer;
	MailTable MailTableType; 
	----	
	host_p varchar2(25) :='********';
	user_p varchar2(25) :='********';
	pass_p varchar2(25) :='********';
	c utl_tcp.connection; -- TCP/IP connection
	i smallint := 0;
	nn smallint := 0;
	z varchar2(32767) := 'none';
	---------------------------------------
	x1 smallint := 0;
	x2 smallint := 0;
	x0 smallint := 0;
	nn2 smallint := 0;
	file1 UTL_FILE.FILE_TYPE;
	y varchar2(32767) := '';
	data  VARCHAR2(256);
	z2 varchar2(32767) := '';
	z3 varchar2(1) := '';

begin

	--utl_tcp.close_all_connections;
	c := utl_tcp.open_connection(host_p, 110);
	--
	--dbms_output.put_line(utl_tcp.get_line(c, true)); 
	--dbms_output.enable(1000000);
	--
	if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
		--dbms_output.put_line('start');
		y := utl_tcp.write_line(c, 'user '||user_p);
		--
		dbms_output.put_line('connect+OK '||y); 
		--
		if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
			y := utl_tcp.write_line(c, 'pass '||pass_p);
			--
			dbms_output.put_line('user+OK '||y); 
			--
			if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
				y := utl_tcp.write_line(c, 'list');
				--
				dbms_output.put_line('pass+OK '||y); 
				--
				if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
					loop 
					z := utl_tcp.get_line(c,true); 
					--
					dbms_output.put_line(z); 
					--
					exit when substr(z,1,1) = '.';
					nn := to_number(substr(z,1,instr(z,' ',1)));	
					MailTable(nn).leng_p := to_number(substr(z,instr(z,' ')+1)); 
					end loop; 
					--
					--dbms_output.put_line('------------------------------------------------------');
					----
					if nn > 0 then 
					--file1 := UTL_FILE.FOPEN('d:\mail', 'mail.eml', 'w');
					x1:=1;
					end if;
					----
					for nn in 1..MailTable.count loop    
						i := utl_tcp.write_line(c, 'retr '||nn); 
						i:= 0;
						x2:= 0;		
						if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
							file1 := UTL_FILE.FOPEN('d:\mail', 'mail_'||nn||'.eml', 'w');	
							---------------------------------------
							z := utl_tcp.get_line(c); 
							loop 
								----0001
								IF (utl_tcp.available(c) > 0) THEN
									if substr(z,1,1) = '.'then 
										x0:=length(z);
										z:=substr(z,2,x0);
										--dbms_output.put_line('x0- '||x0);
									end if;	
									z2:=replace(replace(z,chr(13)),chr(10));
									UTL_FILE.put_line(file1, z2);
									z := utl_tcp.get_line(c);
									---------------
									--dbms_output.put_line('tipaZ- '||z);
									--dbms_output.put_line('dlina- '||utl_tcp.available(c) );
								ELSE
								x2:= 1;
								END IF;
								-----000011
								--dbms_output.put_line('tipaZ- '||z);
								
								-------------------------------------------------------------------------------------------------
							exit when x2 = 1;		
							--exit when substr(z,1,1) = '.';	
								---------------------
								--z2:=replace(replace(z,chr(13)),chr(10));
								--UTL_FILE.put_line(file1, z2);
								--------------------
								if instrb(z,'From: ')>0 then 
									--MailTable(nn).from_p := z; 
									MailTable(nn).from_p := replace(replace(replace(z,'From: '),chr(13)),chr(10)); 
								end if;
								if instrb(z,'To: ')>0 then 
									--MailTable(nn).from_p := z; 
									MailTable(nn).to_p := replace(replace(replace(z,'To: '),chr(13)),chr(10)); 
								end if;	
								if instrb(z,'Subject: ')>0 then 
									--MailTable(nn).from_p := z; 
									MailTable(nn).subj_p:= replace(replace(replace(z,'Subject: '),chr(13)),chr(10)); 
								end if;
								--------------------	
							end loop;
							-------------------------------------
	------------------------------------------------//НАДО УБРАТЬ//-----------						i:= utl_tcp.write_line(c, 'dele '||nn);
	------------------------------------------------//НАДО УБРАТЬ//-----------						i:= 0;
	------------------------------------------------//НАДО УБРАТЬ//-----------						z := utl_tcp.get_line(c);
	------------------------------------------------//НАДО УБРАТЬ//-----------						dbms_output.put_line('dele-'||nn||' '||z);
							---------------------------------------------
							UTL_FILE.FCLOSE(file1);	
							z := '';		
						end if; 
						
					end loop;
					-----------//-----------//---------------//-----------------------//------------------------------
				end if;
			end if;
		end if;
	end if;
	------------------
	i := utl_tcp.write_line(c, 'quit');
	---------------------------------------------------------------------------------------------------
	for i in 1..MailTable.count loop 
	dbms_output.put_line('From: '||MailTable(i).from_p);
	dbms_output.put_line('To: '||MailTable(i).to_p);
	dbms_output.put_line('Subject: '||MailTable(i).subj_p); 
	dbms_output.put_line('------------------------------------------------------'); 
	end loop; 
	dbms_output.put_line('ALL: '||MailTable.count); 
	---------------------------------------------------------------------------------------------------
	--i := utl_tcp.write_line(c, 'quit');
	UTL_FILE.FCLOSE(file1);
	utl_tcp.close_connection(c);
	--dbms_output.put_line('finish');
exception
	when utl_tcp.end_of_input then
	UTL_FILE.FCLOSE(file1);
	utl_tcp.close_connection(c);
	
end;
6 июл 06, 15:51    [2850653]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
Sergey23
Member

Откуда:
Сообщений: 9
CREATE OR REPLACE PROCEDURE SendMail(pSender in varchar2,
pRecipient in varchar2,
pSubject IN VARCHAR2,
pMessage in varchar2
) AS
vMailhost VARCHAR2(80) := 'exsmtp.xxxx';
mail_conn utl_smtp.connection;
BEGIN
mail_conn := utl_smtp.open_connection(vMailhost, 25);
utl_smtp.helo(mail_conn, vMailhost);
utl_smtp.mail(mail_conn, pSender);
utl_smtp.rcpt(mail_conn, pRecipient);
utl_smtp.open_data(mail_conn);
utl_smtp.write_raw_data(mail_conn, UTL_RAW.cast_to_raw('From'||': '||pSender||utl_tcp.CRLF));
utl_smtp.write_raw_data(mail_conn, UTL_RAW.cast_to_raw('To'||': '||pRecipient||utl_tcp.CRLF));
utl_smtp.write_raw_data(mail_conn, UTL_RAW.cast_to_raw('Subject'||': '||pSubject||utl_tcp.CRLF));
utl_smtp.write_raw_data(mail_conn, UTL_RAW.cast_to_raw('MIME-Version: 1.0'||utl_tcp.CRLF));
utl_smtp.write_raw_data(mail_conn, UTL_RAW.cast_to_raw('Content-Type: text/html charset="windows-1251"'||utl_tcp.CRLF));
utl_smtp.write_raw_data(mail_conn, utl_raw.cast_to_raw(chr(13)||chr(10)||pMessage));
utl_smtp.close_data(mail_conn);
utl_smtp.quit(mail_conn);
END sendmail;


Сообщение было отредактировано: 4 янв 10, 23:19
6 июл 06, 17:18    [2851260]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
Sand_Sand_Winter
Guest
2 Sergey

А как же авторизация, да и с кодировкой могут косяки полезть, мне кажется:)
6 июл 06, 17:30    [2851336]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
Sand_Sand_Winter
А как же авторизация

https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=290384#2636623
6 июл 06, 17:39    [2851400]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
Sand_Sand_Winter
Guest
Denis Popov
Sand_Sand_Winter
А как же авторизация

https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=290384#2636623


Спасибо, я смотрел rfc, просто придрался
6 июл 06, 17:43    [2851433]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
aNTGray
Member

Откуда: @ru
Сообщений: 67
он же
UTL_ENCODE.base64_encode

Блинта, где ж Вы раньше были, и почему я не знал, что в 9-ке есть этот пакет!!!
Надо на досуге дописать себе процедурку, добавляющую любое вложение, ато обхожусь только текстовыми до 32 Кб
Вот что значит бессистемное образование..
Надо переиндексировать в голове матчасть..
18 июл 06, 15:38    [2894974]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
LLypuk
Member

Откуда: Kiev
Сообщений: 29
Рабочая процедура для приёма почты по POP3.
Тело письма сохраняется в фыйл.

Написано для Oracle 9.2
CREATE PROCEDURE BK.TEST_POP3_BIO_2 is
	type MailRec is record(
	addr_p varchar2(500),
	from_p varchar2(500),
	to_p varchar2(500),	
	subj_p varchar2(500), 
	date1_p varchar2(500),	
	leng_p integer); 
	type MailTableType is 
	table of MailRec index by binary_integer;
	MailTable MailTableType; 
	----	
	host_p varchar2(25) :='pop.niko.kiev.ua';
	user_p varchar2(25) :='about';
	pass_p varchar2(25) :='About2000';
	c utl_tcp.connection;
	i smallint := 0;
	nn smallint := 0;
	z nvarchar2(32767) := 'none';
	---------------------------------------
	x1 smallint := 0;
	x2 smallint := 0;
	x0 smallint := 0;
	nn2 smallint := 0;
	file1 UTL_FILE.FILE_TYPE;
	y varchar2(32767) := '';
	--data  VARCHAR2(256);
	z2 varchar2(32767) := '';
	z21 varchar2(32767) := '';
	z22 varchar2(32767) := '';
	z3 varchar2(1) := '';
	d1 smallint := 0;
	d2 smallint := 0;
	d3 varchar2(500);
	cod smallint := 0;
	mail_nn INTEGER;
	--
	datep_p smallint := 0;
	subp_p smallint := 0;
	top_p smallint := 0;
	fromp_p smallint := 0;
	
	--

begin
	--utl_tcp.close_connection(c);
	c := utl_tcp.open_connection(host_p, 110);
	if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
		y := utl_tcp.write_line(c, 'user '||user_p);
		if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
			y := utl_tcp.write_line(c, 'pass '||pass_p);
			if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
				y := 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_p := to_number(substr(z,instr(z,' ')+1)); 
					end loop; 
					if nn > 0 then 
						x1:=1;
					end if;
					for nn in 1..MailTable.count loop    
						i := utl_tcp.write_line(c, 'retr '||nn); 
						i:= 0;
						x2:= 0;		
						if substr(utl_tcp.get_line(c, true),1,3) = '+OK' then
							select BK.SEQ_POP3_1.nextval --sequences 
							into mail_nn
							from dual;
							file1:= SYS.UTL_FILE.FOPEN('d:\mail', 'mail_'||mail_nn||'.eml', 'w'); --надо расшарить в Oracle	
							z := utl_tcp.get_line(c);
							datep_p:= 0;
							subp_p:= 0;
							top_p:= 0;
							fromp_p:= 0;		
							if instrb(z,'Return-Path: ')>0 then 
								d1:= instr(z,'<')+1;
								d2:= instr(z,'>',d1)-d1;	
								d3:= substr(z,d1,d2);
								MailTable(nn).addr_p:=(d3);
								--else
							--	MailTable(nn).addr_p:='empty';
							end if;
							loop
							------//tochka
							--dbms_output.put_line('tochka-0');
							------////tochka	
								IF (utl_tcp.available(c) > 0) THEN
									if substr(z,1,1) = '.'then 
										x0:=length(z);
										z:=substr(z,2,x0);
									end if;	
									z2:=replace(replace(z,chr(13)),chr(10));
									
									------//tochka
									--dbms_output.put_line('dl-:'||utl_tcp.available(c));
									--dbms_output.put_line('z-:'||substr(z2,1,250));
									------////tochka
									
									if length(z2) > 250 then
									z21:=substr(z2,1,250);
									z22:=substr(z2,251,length(z2));
									z21:=replace(replace(z21,chr(13)),chr(10));
									z22:=replace(replace(z22,chr(13)),chr(10));
									UTL_FILE.put_line(file1, z21);
									UTL_FILE.put_line(file1, substr(z22,1,250));
									else
									UTL_FILE.put_line(file1, z2);
									end if;
									
									z := utl_tcp.get_line(c);									
									--z := substr(utl_tcp.get_line(c),1,254);
								ELSE
								x2:= 1;
								END IF;
							exit when x2 = 1;		
				
								------//tochka
									--dbms_output.put_line('RP-:'||instrb(z,'Return-Path: '));
									--dbms_output.put_line('z-:'||substr(z2,1,250));
								------////tochka
								
								if (instrb(z,'From: ')>0) AND (fromp_p = 0) then 
									d1:= instr(z,'<')+1;
									d2:= instr(z,'>',d1)-d1;	
									d3:= substr(z,d1,d2);
									MailTable(nn).from_p := replace(replace(replace(d3,'From: '),chr(13)),chr(10)); 
									fromp_p:= 1;
								end if;
								if (instrb(z,'To: ')>0) AND (top_p = 0) then
									d1:= instr(z,'<')+1;
									d2:= instr(z,'>',d1)-d1;	
									d3:= substr(z,d1,d2);
									MailTable(nn).to_p := replace(replace(replace(d3,'To: '),chr(13)),chr(10)); 
									top_p:= 1;
								end if;	
								cod:= 0;
								if (instrb(z,'Subject: ')>0) AND (subp_p = 0) then 
									------
									
									if instr(z,'B?')>0 then
										d1:= instr(z,'B?')+2;
										d2:= instr(z,'?=',d1)-d1;	
										d3:= substr(z,d1,d2);
										if instr(z,'=?koi8-r?B?')>0 then
											MailTable(nn).subj_p:= convert(UTL_RAW.cast_to_varchar2(utl_encode.base64_decode(UTL_RAW.cast_to_raw(d3))), 'CL8MSWIN1251', 'CL8KOI8R'));
										--elsif instr(z,'=?windows-1251?B?')>0 then
										--	MailTable(nn).subj_p:= BK.TEST_DEC_1(d3);
										else
											MailTable(nn).subj_p:= UTL_RAW.cast_to_varchar2(utl_encode.base64_decode(UTL_RAW.cast_to_raw(d3)));
										end if;
										
									else
										MailTable(nn).subj_p:= replace(replace(replace(z,'Subject: '),chr(13)),chr(10));
									end if;
									subp_p:= 1;		
									------
								end if;
								if (instrb(z,'Date: ')>0) AND (datep_p = 0) then
									MailTable(nn).date1_p:= replace(replace(replace(z,'Date: '),chr(13)),chr(10));
									datep_p:= 1;
								end if;	
							end loop;
							------
							insert into BK.TEST_EMAIL(nom_t, addr_t, from_t, to_t, subj_t, date1_t)
							values(nvl(mail_nn,0), nvl(MailTable(nn).addr_p,'empty'), nvl(MailTable(nn).from_p,'empty'), nvl(MailTable(nn).to_p,'empty'), nvl(MailTable(nn).subj_p,'empty'), nvl(MailTable(nn).date1_p,'empty'));	
							------
							
							
							i:= utl_tcp.write_line(c, 'dele '||nn);
							z := utl_tcp.get_line(c);
							i:= 0;
							------//tochka
							--dbms_output.put_line('tochka-1');
							------////tochka
							
							SYS.UTL_FILE.FCLOSE(file1);
								
							z := '';		
						end if;
						------//tochka
						--dbms_output.put_line('tochka-2');
						------////tochka	
					end loop;
					------//tochka
					--dbms_output.put_line('tochka-3');
					-----////tochka
				end if;
				------//tochka
				--dbms_output.put_line('tochka-4');
				------////tochka
			end if;
			------//tochka
			--dbms_output.put_line('tochka-5');
			------////tochka
		end if;
		------//tochka
		--dbms_output.put_line('tochka-6');
		------////tochka
	end if;
	------//tochka
	--dbms_output.put_line('tochka-7');
	------////tochka
	i := utl_tcp.write_line(c, 'quit');
	---------------------------------------------------------------------------------------------------
	--for i in 1..MailTable.count loop 
	--dbms_output.put_line('From: '||MailTable(i).from_p);
	--dbms_output.put_line('To: '||MailTable(i).to_p);
	--	dbms_output.put_line('Subject: '||MailTable(i).subj_p); 
	--dbms_output.put_line('------------------------------------------------------'); 
	--end loop; 
	dbms_output.put_line('ALL: '||MailTable.count); 
	---------------------------------------------------------------------------------------------------
	UTL_FILE.FCLOSE(file1);
	utl_tcp.close_connection(c);
	------//tochka
	--dbms_output.put_line('tochka-8');
	------////tochka
exception
	when utl_tcp.end_of_input then
	UTL_FILE.FCLOSE(file1);
	utl_tcp.close_connection(c);
	
end;


Сообщение было отредактировано: 4 янв 10, 23:21
26 июл 06, 15:49    [2929015]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
Прошел мимо
Guest
Простой способ для NT:
http://oraclub.tomsk.ru/zip/sendmail_from_oracle8_nt.zip
11 окт 06, 18:26    [3249567]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
tornton
Member

Откуда:
Сообщений: 344
он же Member, писал ---------------------------------
Если кому интересно - заголовки From, To и Subject нужно записывать в Base64 кодировке - тогда всё прекрасно читается в любых почтовиках.
Например,
'From: =?windows-1251?B?'||UTL_RAW.cast_to_varchar2 (UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw (CONVERT (:a_value,'CL8MSWIN1251'))))||'?= '
--------------------------------------------------
и действительно, все прекрасно работает.
А кто подскажет, как добиться чтобы и тело письма прекрасно читалось в любых почтовиках.
2 ноя 06, 13:56    [3347389]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
typhoon
Member

Откуда:
Сообщений: 6
Понимаю что совершенно корявый код, но пока только так получилось отсылать вложения.
Пытаюсь вложить в письмо файл из блоб поля, вместо 34 кб получаю что-то около килобайта:

 ...
 fil blob;
 v_chnk raw(32767);
 off number;
 amt binary_integer;
 boundary constant varchar2(256) := '-----7D81B75CCC90D2974F7A1CBD'; 
 first_boundary constant varchar2(256) := '--'||BOUNDARY||utl_tcp.CRLF; 
 last_boundary constant varchar2(256) := '--'||BOUNDARY||'--'||utl_tcp.CRLF; 
 multipart_mime_type constant varchar2(256) := 'multipart/mixed; boundary="'||boundary||'"'; 
...
for f in (
  select id, t_filename
  from z_pakfiles
  where pakid = ipakid and (t_filecat = 'inv_pril_1')
 )loop
  select t_filedata into fil from z_pakfiles where id = f.id;
  utl_smtp.write_data(c, FIRST_BOUNDARY); 
  send_header('Content-Type', 'application/octet-stream; name="'||f.t_filename||'"');
  send_header('Content-Disposition', 'attachment; filename="'||f.t_filename||'"'); 
  send_header('Content-transfer-encoding', 'base64'); 
  utl_smtp.write_data(c, utl_tcp.CRLF);
  v_chnk := '';
  amt := 32;
  off := 1;
  begin
   for ic in 1 .. dbms_lob.getlength(fil) / amt loop
    dbms_lob.read(fil, amt, off, v_chnk);
    off := off + amt;
    utl_smtp.write_raw_data(c, UTL_ENCODE.base64_decode(v_chnk)); 
   end loop;
  exception when no_data_found then print_error(sqlerrm); 
  end;
  utl_smtp.write_data(c, utl_tcp.CRLF); 
 end loop;

 utl_smtp.write_data(c, LAST_BOUNDARY); 
 utl_smtp.close_data(c); 
 utl_smtp.quit(c);

...
как правильно впихнуть весь блоб в письмо?

Сообщение было отредактировано: 4 янв 10, 23:22
22 дек 06, 10:29    [3569352]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
_рубль
Guest
Elic
UTL_TCP(FAQ) + RFC1939
вкусив мануала по UTL_TCP понял что получить почту с ящика с поддержкой SSL не получится.
или я ошибаюсь и средствами pl/sql это возможно
7 мар 07, 13:33    [3875046]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8136
Уж точно одно из двух-пяти... :-)
7 мар 07, 13:43    [3875105]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
_рубль
Guest
проблема решена
за бутылку пива админ вырубил поддержку SSL
:)
7 мар 07, 14:08    [3875294]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
kraynopp
Member

Откуда: Пенза
Сообщений: 120
DenSoft
Что самое противное в этом деле что в любом случае
письмо создается не по стандарту.
Т.е. если используем русские символы в заголовке письма (тема и т.д.)
то приведение их к koi8-r не выполняется.
В результате неправильно отобразается полученное письмо.
Хотя в The Bat! это легко исправляется, но все равно не приятно.

http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14258/u_encode.htm#sthref14024
9 мар 07, 07:56    [3879121]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Email средствами pl/SQL  [new]
ioannov
Member

Откуда: Украина, Кривой Рог
Сообщений: 122
Oracle 10g
ERROR at line 15:
ORA-06550: line 15, column 4:
PLS-00201: identifier 'UTL_TCP' must be declared


Использую код 3aMaHyXa от 6 июл 06, 15:51
или другой, с тем же UTL_TCP

Будьте добры, объясните в чем проблема.
4 янв 10, 21:26    [8147512]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
ioannov
Member

Откуда: Украина, Кривой Рог
Сообщений: 122
Скажем
Пример с Oracle
DECLARE
  c  utl_tcp.connection;  -- TCP/IP connection to the Web server
  ret_val pls_integer; 
BEGIN
  c := utl_tcp.open_connection(remote_host => 'www.acme.com',
                               remote_port =>  80,
                               charset     => 'US7ASCII');  -- open connection
  ret_val := utl_tcp.write_line(c, 'GET / HTTP/1.0');    -- send HTTP request
  ret_val := utl_tcp.write_line(c);
  BEGIN
    LOOP
      dbms_output.put_line(utl_tcp.get_line(c, TRUE));  -- read result
    END LOOP;
  EXCEPTION
    WHEN utl_tcp.end_of_input THEN
      NULL; -- end of input
  END;
  utl_tcp.close_connection(c);
END;


Результат выполнения в Oracle 10g:
ERROR at line 2:
ORA-06550: line 2, column 6:
PLS-00201: identifier 'UTL_TCP' must be declared
ORA-06550: line 2, column 6:
PL/SQL: Item ignored
ORA-06550: line 5, column 3:
PLS-00320: the declaration of the type of this expression is incomplete or
malformed
ORA-06550: line 5, column 3:
PL/SQL: Statement ignored
ORA-06550: line 8, column 14:
PLS-00201: identifier 'UTL_TCP' must be declared
ORA-06550: line 8, column 3:
PL/SQL: Statement ignored
ORA-06550: line 9, column 14:
PLS-00201: identifier 'UTL_TCP' must be declared
ORA-06550: line 9, column 3:
PL/SQL: Statement ignored
ORA-06550: line 12, column 28:
PLS-00201: identifier 'UTL_TCP' must be declared
ORA-06550: line 12, column 7:
PL/SQL: Statement ignored
ORA-06550: line 15, column 10:
PLS-00201: identifier 'UTL_TCP' must be declared
ORA-06550: line 10, column 3:
PL/SQL: Statement ignored
ORA-06550: line 18, column 28:
PLS-00320: the declaration of the type of this expression is incomplete or
malformed
ORA-06550: line 18, column 3:
PL/SQL: Statement ignored
5 янв 10, 00:52    [8148141]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
ioannov
Member

Откуда: Украина, Кривой Рог
Сообщений: 122
Народ, до сих пор не разобрался, вопрос все еще актуален.
5 янв 10, 11:31    [8148517]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
ILoveCoffee
Member

Откуда: Astana
Сообщений: 986
ioannov,
по приведенному коду 10.2.0.1 + 10.2.0.3 полет нормальный
+

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 
Connected as releaseClean
 
SQL> set serveroutput on size 99999;
SQL> 
SQL> DECLARE
  2    c  utl_tcp.connection;  -- TCP/IP connection to the Web server
  3    ret_val pls_integer;
  4  BEGIN
  5    c := utl_tcp.open_connection(remote_host => 'www.acme.com',
  6                                 remote_port =>  80,
  7                                 charset     => 'US7ASCII');  -- open connection
  8    ret_val := utl_tcp.write_line(c, 'GET / HTTP/1.0');    -- send HTTP request
  9    ret_val := utl_tcp.write_line(c);
 10    BEGIN
 11      LOOP
 12        dbms_output.put_line(utl_tcp.get_line(c, TRUE));  -- read result
 13      END LOOP;
 14    EXCEPTION
 15      WHEN utl_tcp.end_of_input THEN
 16        NULL; -- end of input
 17    END;
 18    utl_tcp.close_connection(c);
 19  END;
 20  /
 
HTTP/1.1 403 Forbidden ( ISA Server отклонил указанный URL-адрес.  )
Via: 1.1 WIN-SRV
Connection: close
Proxy-Connection: close
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Content-Length: 4748  
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Сообщение об ошибке</TITLE>
<META http-equiv=Content-Type content="text/html; charset=UTF-8">
<STYLE id=L_default_1>A {
	FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #005a80; FONT-FAMILY: tahoma
}
A:hover {
	FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #0d3372; FONT-FAMILY: tahoma
}
TD {
	FONT-SIZE: 8pt; FONT-FAMILY: tahoma
}
TD.titleBorder {
	BORDER-RIGHT: #955319 1px solid; BORDER-TOP: #955319 1px solid; PADDING-LEFT: 8px; FONT-WEIGHT: bold; FONT-SIZE: 12pt; VERTICAL-ALIGN: middle; BORDER-LEFT: #955319 0px solid; COLOR: #955319; BORDER-BOTTOM: #955319 1px solid; FONT-FAMILY: tahoma; HEIGHT: 35px; BACKGROUND-COLOR: #d2b87a; TEXT-ALIGN: left
}
TD.titleBorder_x {
	BORDER-RIGHT: #955319 0px solid; BORDER-TOP: #955319 1px solid; PADDING-LEFT: 8px; FONT-WEIGHT: bold; FONT-SIZE: 12pt; VERTICAL-ALIGN: middle; BORDER-LEFT: #955319 1px solid; COLOR: #978c79; BORDER-BOTTOM: #955319 1px solid; FONT-FAMILY: tahoma; HEIGHT: 35px; BACKGROUND-COLOR: #d2b87a; TEXT-ALIGN: left
}
.TitleDescription {
	FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: tahoma
}
SPAN.explain {
	FONT-WEIGHT: normal; FONT-SIZE: 10pt; COLOR: #934225
}
SPAN.TryThings {
	FONT-WEIGHT: normal; FONT-SIZE: 10pt; COLOR: #934225
}
.TryList {
	MARGIN-TOP: 5px; FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR: black; FONT-FAMILY: tahoma
}
.X {
	BORDER-RIGHT: #955319 1px solid; BORDER-TOP: #955319 1px solid; FONT-WEIGHT: normal; FONT-SIZE: 12pt; BORDER-LEFT: #955319 1px solid; COLOR: #7b3807; BORDER-BOTTOM: #955319 1px solid; FONT-FAMILY: verdana; BACKGROUND-COLOR: #d1c2b4
}
.adminList {
	MARGIN-TOP: 2px
}
</STYLE>
<META content="MSHTML 6.00.2800.1170" name=GENERATOR></HEAD>
<BODY bgColor=#f3f3ed>
<TABLE cellSpacing=0 cellPadding=0 width="100%">
  <TBODY>
  <TR>
    <TD class=titleborder_x width=30>
      <TABLE height=25 cellSpacing=2 cellPadding=0 width=25 bgColor=black>
        <TBODY>
        <TR>
          <TD class=x vAlign=center align=middle>X</TD>
        </TR>
        </TBODY>
      </TABLE>
    </TD>
    <TD class=titleBorder id=L_default_2>Сообщение о доступе к сети:<SPAN class=TitleDescription> Не удается отобразить страницу</SPAN> </TD>
  </TR>
  </TBODY>
</TABLE>
 
<TABLE id=spacer>
  <TBODY>
  <TR>
    <TD height=10></TD></TR></TBODY></TABLE>
<TABLE width=400>
  <TBODY>
  <TR>
    <TD noWrap width=25></TD>
    <TD width=400><SPAN class=explain><ID id=L_default_3><B>Объяснение:</B></ID></SPAN><ID id=L_default_4> При попытке доступа к этой странице произошла ошибка,  страницу отобразить невозможно. </ID><BR><BR>
    <B><SPAN class=tryThings><ID id=L_default_5><B>Попробуйте следующее:</B></ID></SPAN></B> 
      <UL class=TryList>
        <LI id=L_default_6><B>Обновление страницы:</B> выполните повторный поиск страницы, нажав кнопку "Обновить". Возможно, тайм-аут произошел из-за перегрузки Интернета.
<LI id=L_default_7><B>Проверка написания:</B> проверьте правильность написания адреса веб-узла. Возможны ошибки при вводе адреса.
<LI id=L_default_8><B>Доступ из ссылки:</B> если имеется ссылка на искомую страницу, попробуйте получить доступ к странице с помощью этой ссылки.
 
      </UL>
<ID id=L_default_9>Если страницу все еще не удается отобразить, обратитесь к администратору или в службу поддержки.</ID> <BR><BR>
    </TD>
  </TR>
  </TBODY>
</TABLE>
 
<TABLE id=spacer><TBODY><TR><TD height=15></TD></TR></TBODY></TABLE>
 
<TABLE width=400>
  <TBODY>
  <TR>
    <TD noWrap width=25></TD>
    <TD width=400 id=L_default_10><B>Технические сведения (для персонала службы поддержки)</B> 
      <UL class=adminList>
        <LI id=L_default_11>Код ошибки: 403 Запрет доступа. ISA Server отклонил указанный URL-адрес. (12202)
<LI id=L_default_12>IP-адрес: МОЙИП
<LI id=L_default_13>Дата: 1/5/2010 9:15:19 AM [GMT]
<LI id=L_default_14>Сервер: МОЯИСА
<LI id=L_default_15>Источник: прокси
 
      </UL>
    </TD>
  </TR>
  </TBODY>
</TABLE>
 
</BODY>
</HTML>
 
 
PL/SQL procedure successfully completed
 
SQL> 
5 янв 10, 12:19    [8148694]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
ioannov,

select owner, object_name, object_type from all_objects where object_name = 'UTL_TCP';
5 янв 10, 12:19    [8148696]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
ioannov
Member

Откуда: Украина, Кривой Рог
Сообщений: 122
suPPLer
ioannov,

select owner, object_name, object_type from all_objects where object_name = 'UTL_TCP';


Oracle 10g
OWNER OBJECT_NAME
------------------------------ ------------------------------
OBJECT_TYPE
-------------------
SYS UTL_TCP
PACKAGE

SYS UTL_TCP
PACKAGE BODY

PUBLIC UTL_TCP
SYNONYM


Oracle 10g
SQL> Grant on utl_Tcp to system;
Grant on utl_Tcp to system
*
ERROR at line 1:
ORA-00990: missing or invalid privilege
5 янв 10, 12:39    [8148779]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
ioannov
Oracle 10g
SQL> Grant on utl_Tcp to system;
Grant on utl_Tcp to system
*
ERROR at line 1:
ORA-00990: missing or invalid privilege


0. А под SYSTEM сабж действительно нужен?
1.
GRANT EXECUTE ON package_name TO user_name
5 янв 10, 12:46    [8148806]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
ioannov
Member

Откуда: Украина, Кривой Рог
Сообщений: 122
suPPLer

0. А под SYSTEM сабж действительно нужен?
1.
GRANT EXECUTE ON package_name TO user_name


Пробовал и для пользователя и для SYSTEM. Вариант, что предложили тоже пробовал:

Oracle 10g
SQL> grant execute on utl_tcp to system;
grant execute on utl_tcp to system
*
ERROR at line 1:
ORA-00942: table or view does not exist
5 янв 10, 12:57    [8148866]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
ioannov,

автор
OWNER OBJECT_NAME
------------------------------ ------------------------------
OBJECT_TYPE
-------------------
SYS UTL_TCP
PACKAGE

SYS UTL_TCP
PACKAGE BODY

PUBLIC UTL_TCP
SYNONYM
5 янв 10, 13:03    [8148902]     Ответить | Цитировать Сообщить модератору
 Re: Email средствами pl/SQL  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
ioannov,

0. Зайдите под владельцем пакета (SYS). Искать тех, кому давали грант на выполнение WITH ADMIN OPTION, потом сами научитесь.
1. Выполните
GRANT EXECUTE ON UTL_TCP TO user_name
, где user_name - пользователь, под которым будет выполнятся Ваш PL/SQL-код.
5 янв 10, 13:04    [8148905]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Oracle Ответить