email via utl.smtp autenticado
estou fazendo o seguinte :
CREATE OR REPLACE PROCEDURE TESTE_ENVIA_EMAIL ( remetente varchar2 ,
destinatario varchar2 ,
assunto varchar2 ,
mensagem varchar2 ) as
c utl_smtp.connection;
username varchar2(256) := ´usuario´;
password varchar2(256) := ´senha´;
PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS
BEGIN
utl_smtp.write_data(c, name || ´: ´ || header || utl_tcp.CRLF);
END;
BEGIN
c := utl_smtp.open_connection(´99.99.99.99´);--informo aqui o n ip
utl_smtp.helo(c, ´minhaempresa.com.br´); -- dominio
utl_smtp.command(c, ´AUTH LOGIN´);
utl_smtp.command(c, utl_encode.base64_encode (utl_raw.cast_to_raw(username)));
utl_smtp.command(c, utl_encode.base64_encode (utl_raw.cast_to_raw(password)));
utl_smtp.mail(c, remetente);
utl_smtp.rcpt(c, destinatario);
utl_smtp.open_data(c);
send_header(´From´ , remetente );
send_header(´To´ , destinatario );
send_header(´Subject´ , assunto );
utl_smtp.write_data(c, utl_tcp.CRLF || mensagem);
utl_smtp.close_data(c);
utl_smtp.quit(c);
EXCEPTION
WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
utl_smtp.quit(c);
raise_application_error(-20000,
´A tentativa de enviar o e-mail gerou o seguinte erro: ´ || sqlerrm);
WHEN OTHERS THEN
RAISE;
END;
/
quando envio tomo o seguinte erro :
1 1 ORA-20000: A tentativa de enviar o e-mail gerou o seguinte erro: ORA-29279: SMTP permanent error: 535 Error: authentication failed
ORA-06512: at ´SAUDE.TESTE_ENVIA_EMAIL´, line 35
ORA-06512: at line 2
Alguém tem alguma luz ?
obs : O servidor requer autenticação
obs 2 : num exemplo original que peguei era
utl_smtp.command(c, demo_base64.encode(utl_raw.cast_to_raw(username)));
utl_smtp.command(c, demo_base64.encode(utl_raw.cast_to_raw(password)));
mas não vi esta function , em outra página vi a dica para mudar
grato
CREATE OR REPLACE PROCEDURE TESTE_ENVIA_EMAIL ( remetente varchar2 ,
destinatario varchar2 ,
assunto varchar2 ,
mensagem varchar2 ) as
c utl_smtp.connection;
username varchar2(256) := ´usuario´;
password varchar2(256) := ´senha´;
PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS
BEGIN
utl_smtp.write_data(c, name || ´: ´ || header || utl_tcp.CRLF);
END;
BEGIN
c := utl_smtp.open_connection(´99.99.99.99´);--informo aqui o n ip
utl_smtp.helo(c, ´minhaempresa.com.br´); -- dominio
utl_smtp.command(c, ´AUTH LOGIN´);
utl_smtp.command(c, utl_encode.base64_encode (utl_raw.cast_to_raw(username)));
utl_smtp.command(c, utl_encode.base64_encode (utl_raw.cast_to_raw(password)));
utl_smtp.mail(c, remetente);
utl_smtp.rcpt(c, destinatario);
utl_smtp.open_data(c);
send_header(´From´ , remetente );
send_header(´To´ , destinatario );
send_header(´Subject´ , assunto );
utl_smtp.write_data(c, utl_tcp.CRLF || mensagem);
utl_smtp.close_data(c);
utl_smtp.quit(c);
EXCEPTION
WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
utl_smtp.quit(c);
raise_application_error(-20000,
´A tentativa de enviar o e-mail gerou o seguinte erro: ´ || sqlerrm);
WHEN OTHERS THEN
RAISE;
END;
/
quando envio tomo o seguinte erro :
1 1 ORA-20000: A tentativa de enviar o e-mail gerou o seguinte erro: ORA-29279: SMTP permanent error: 535 Error: authentication failed
ORA-06512: at ´SAUDE.TESTE_ENVIA_EMAIL´, line 35
ORA-06512: at line 2
Alguém tem alguma luz ?
obs : O servidor requer autenticação
obs 2 : num exemplo original que peguei era
utl_smtp.command(c, demo_base64.encode(utl_raw.cast_to_raw(username)));
utl_smtp.command(c, demo_base64.encode(utl_raw.cast_to_raw(password)));
mas não vi esta function , em outra página vi a dica para mudar
grato
Motta
Curtidas 0
Respostas
Fernando Piccini
14/09/2005
Ola Motta,
Bem! acho q tenho a solução pois fiz uma procedure igual :D
soh q funciona para versão 9i do Oracle no 8 na funciona!
mas antes gostaria de saber onde encontro a Packge ´utl_encode´? Pois preciso da function ´base64_encode´ que esta definida dentro deste pacote.
E se encotrar como faço para executar no meu oracle via SQL-plus, ou seja, q linha de comando devo executar?
desde ja agradeço
Bem! acho q tenho a solução pois fiz uma procedure igual :D
soh q funciona para versão 9i do Oracle no 8 na funciona!
mas antes gostaria de saber onde encontro a Packge ´utl_encode´? Pois preciso da function ´base64_encode´ que esta definida dentro deste pacote.
E se encotrar como faço para executar no meu oracle via SQL-plus, ou seja, q linha de comando devo executar?
desde ja agradeço
GOSTEI 0
Motta
14/09/2005
Fernando , uma function em que peguei de exemplo na web usava uma tal demo_base64 (uma página em japones) , não localizei em lugar nenhum isto , numa outra página achei que poderia trocar pela utl_encode (está na minha instalação, creio ser padrão do sys).
Vc tem a solução , tem uma sp que envie email autenticando smtp ?
Abraço
Motta
Vc tem a solução , tem uma sp que envie email autenticando smtp ?
Abraço
Motta
GOSTEI 0
Fernando Piccini
14/09/2005
Ola Motta,
bem! cm vc me ajudou estou lhe retrebuindo :D
aki funcionou e acho q eh bem oq vc precisa!
resolve o problema da autenticação
obs: tb tive este problema ai fiz esta procedure e resolveu
ah! gostaria q se puder lista-se o link da onde vc achou a dica q sugeriu anteriormente, ou se achar mais alguma coisa, posta-se ai :D
vlw
CREATE OR REPLACE
PROCEDURE Enviar_Email(ds_mensagem_pvarchar2,
ds_email_origem_pvarchar2,
ds_email_destino_pvarchar2,
nm_usuario_pvarchar2) is
ds_email_origem_wvarchar2(40);
ds_smtp_wvarchar2(20);
ds_user_id_wvarchar2(50);
ds_senha_smtp_wvarchar2(50);
/* Abre conexão SMTP e HTTP */
CONEXAOUTL_SMTP.CONNECTION;
BEGIN
/* Abre conexão com um Servidor SMTP(Simple Mail Transfer Protocol), porta padrão SMTP é 25 */
CONEXAO:= utl_smtp.open_connection (ds_smtp_w,25);
UTL_SMTP.HELO (CONEXAO, ds_smtp_w);/* Endereço do servidor de SMTP*/
utl_smtp.command (CONEXAO, ´AUTH LOGIN´);
utl_smtp.command (CONEXAO, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw((ds_user_id_w)))));
utl_smtp.command (CONEXAO, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw((ds_senha_smtp_w)))));
UTL_SMTP.MAIL (CONEXAO, (´<´ || ds_email_origem_w || ´>´));/* E-mail de quem está mandando*/
UTL_SMTP.RCPT (CONEXAO, (´<´ || ds_email_destino_p || ´>´));/* Para quem vou mandar */
UTL_SMTP.DATA (CONEXAO, ds_mensagem_p);
UTL_SMTP.QUIT (CONEXAO);
Exception
WHEN OTHERS THEN
utl_smtp.quit (conexao);
raise_application_error(-20011,´Não foi possível enviar o e-mail devido ao seguinte erro: ´ || sqlerrm);
END Enviar_Email;
/
bem! cm vc me ajudou estou lhe retrebuindo :D
aki funcionou e acho q eh bem oq vc precisa!
resolve o problema da autenticação
obs: tb tive este problema ai fiz esta procedure e resolveu
ah! gostaria q se puder lista-se o link da onde vc achou a dica q sugeriu anteriormente, ou se achar mais alguma coisa, posta-se ai :D
vlw
CREATE OR REPLACE
PROCEDURE Enviar_Email(ds_mensagem_pvarchar2,
ds_email_origem_pvarchar2,
ds_email_destino_pvarchar2,
nm_usuario_pvarchar2) is
ds_email_origem_wvarchar2(40);
ds_smtp_wvarchar2(20);
ds_user_id_wvarchar2(50);
ds_senha_smtp_wvarchar2(50);
/* Abre conexão SMTP e HTTP */
CONEXAOUTL_SMTP.CONNECTION;
BEGIN
/* Abre conexão com um Servidor SMTP(Simple Mail Transfer Protocol), porta padrão SMTP é 25 */
CONEXAO:= utl_smtp.open_connection (ds_smtp_w,25);
UTL_SMTP.HELO (CONEXAO, ds_smtp_w);/* Endereço do servidor de SMTP*/
utl_smtp.command (CONEXAO, ´AUTH LOGIN´);
utl_smtp.command (CONEXAO, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw((ds_user_id_w)))));
utl_smtp.command (CONEXAO, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw((ds_senha_smtp_w)))));
UTL_SMTP.MAIL (CONEXAO, (´<´ || ds_email_origem_w || ´>´));/* E-mail de quem está mandando*/
UTL_SMTP.RCPT (CONEXAO, (´<´ || ds_email_destino_p || ´>´));/* Para quem vou mandar */
UTL_SMTP.DATA (CONEXAO, ds_mensagem_p);
UTL_SMTP.QUIT (CONEXAO);
Exception
WHEN OTHERS THEN
utl_smtp.quit (conexao);
raise_application_error(-20011,´Não foi possível enviar o e-mail devido ao seguinte erro: ´ || sqlerrm);
END Enviar_Email;
/
GOSTEI 0
Motta
14/09/2005
http://www.dbonline.cn/source/oracle/20031213before/SQL/How¬20to¬20Use¬20UTL_SMTP¬20Package¬20With¬20a¬20Mail¬20Server.htm
http://www.oracle.com/technology/sample_code/tech/pl_sql/htdocs/maildemo8i_sql.txt
http://www.oracle.com/technology/sample_code/tech/pl_sql/htdocs/maildemo8i_sql.txt
GOSTEI 0
Motta
14/09/2005
Fernando, funcionou ok, mas como se coloca o Assunto (subject) desta forma ??
GOSTEI 0
Fernando Piccini
14/09/2005
Ola,
Bem! parece engraçado, mas tb naum consegui colocar o assunto.
No meu teste, sempre vai sem assunto. Seria muito interessante que o mesmo aparece-se.
Se alguem suber poderia nos ajudar ai.
vlw pela colaboração
Bem! parece engraçado, mas tb naum consegui colocar o assunto.
No meu teste, sempre vai sem assunto. Seria muito interessante que o mesmo aparece-se.
Se alguem suber poderia nos ajudar ai.
vlw pela colaboração
GOSTEI 0
Motta
14/09/2005
Já havia conseguido, esqueci de postar.
troque :
UTL_SMTP.DATA (CONEXAO, ds_mensagem_p);
por :
UTL_SMTP.OPEN_DATA(CONEXAO);
UTL_SMTP.WRITE_DATA(CONEXAO,´Subject´|| ´: ´ || ds_assunto || utl_tcp.CRLF);
UTL_SMTP.WRITE_DATA(CONEXAO, utl_tcp.CRLF || ds_mensagem_p);
UTL_SMTP.CLOSE_DATA(CONEXAO);
onde ds_assunto é o parametro do assunto tipo varchar2
valeu !
troque :
UTL_SMTP.DATA (CONEXAO, ds_mensagem_p);
por :
UTL_SMTP.OPEN_DATA(CONEXAO);
UTL_SMTP.WRITE_DATA(CONEXAO,´Subject´|| ´: ´ || ds_assunto || utl_tcp.CRLF);
UTL_SMTP.WRITE_DATA(CONEXAO, utl_tcp.CRLF || ds_mensagem_p);
UTL_SMTP.CLOSE_DATA(CONEXAO);
onde ds_assunto é o parametro do assunto tipo varchar2
valeu !
GOSTEI 0
Fernando Piccini
14/09/2005
Ola motta :D
obrigado mais uma vez
grande abraço
obrigado mais uma vez
grande abraço
GOSTEI 0