- This topic has 3 replies, 3 voices, and was last updated 6 years, 7 months ago by José Laurindo Chiappa.
-
AuthorPosts
-
26 de março de 2018 at 6:11 pm #109252sergiomsoParticipant
Pessoal
Bom dia
Preciso da ajuda de vocês. Tenho uma proc de monitoração e estou tentando encaminhar por e-mail através usando uma procedure PRC_ENVIA_EMAIL.
A procedure de monitoração está bem abaixo da procedure PRC_ENVIA_EMAIL.
Ao executar o declare da erro abaixo:declare
*
ERROR at line 1:
ORA-29279: SMTP permanent error: 501 5.1.7 Bad sender address syntax
ORA-06512: at “SYS.UTL_SMTP”, line 54
ORA-06512: at “SYS.UTL_SMTP”, line 140
ORA-06512: at “SYS.UTL_SMTP”, line 469
ORA-06512: at “DBADMIN.PRC_ENVIA_EMAIL”, line 33
ORA-06512: at line 75Muito Obrigado pela ajuda
Segue as informações:
create or replace PROCEDURE “PRC_ENVIA_EMAIL”
( P_MESSAGE IN VARCHAR2, P_EMAIL_ORIG IN VARCHAR2,P_EMAIL_DEST IN VARCHAR2,P_ASSUNTO IN VARCHAR2)
IS
/* Constantes */
cSMTP_SERVER CONSTANT VARCHAR2(30) :=’10.146.19.119′;
cSMTP_SERVER_PORT CONSTANT NUMBER := 25;
CRLF CONSTANT VARCHAR2(2) := chr(13) || chr(10);
cMENSAGEM CONSTANT VARCHAR2(32767) := ‘Data: ‘ || TO_CHAR( SYSDATE, ‘dd Mon yy hh24:mi:ss’ ) || CRLF ||
‘From: ‘ || P_EMAIL_ORIG || CRLF ||
‘Subject: ‘ || P_ASSUNTO || CRLF ||
‘To: ‘ || P_EMAIL_DEST || CRLF ||
‘Mime-Version: 1.0’ || CRLF ||
‘Content-Type: multipart/mixed; boundary=”DMW.Boundary.605592468″‘ || CRLF ||
‘–DMW.Boundary.605592468’ || CRLF ||
‘Content-Type: text/plain; name; charset=US-ASCII’ || CRLF ||
‘Content-Disposition: inline; filename’ || CRLF ||
‘Content-Transfer-Encoding: 7bit’ || CRLF ||
” || CRLF;/* Variaveis */
CONN UTL_SMTP.CONNECTION;
vMESG VARCHAR2(32767);
vMESG_LEN NUMBER;
vCONTINUE BOOLEAN := TRUE;BEGIN
/* Abrindo Conex?o SMTP e HTTP */
CONN := UTL_SMTP.OPEN_CONNECTION( cSMTP_SERVER, cSMTP_SERVER_PORT );/* Comunicando SMTP */
UTL_SMTP.HELO( CONN, cSMTP_SERVER );
UTL_SMTP.MAIL( CONN, P_EMAIL_DEST );
UTL_SMTP.RCPT( CONN, P_EMAIL_DEST );
UTL_SMTP.OPEN_DATA ( CONN );/* Criando Cabeca do E-mail */
vMESG := cMENSAGEM || P_MESSAGE || CRLF;
UTL_SMTP.WRITE_DATA ( CONN, vMESG );
/* Fechando a Cabeca do E-mail */
vMESG := CRLF || ‘IAMSPE – Instituto de Assistencia Medica ao Servidor Publico Estadual ‘ ||’ – ‘||to_char(sysdate,’dd/mm/yyyy hh24:mi:ss’)|| CRLF;
UTL_SMTP.WRITE_DATA( CONN, vMESG );
/* Fechando conex?o SMTP */
UTL_SMTP.CLOSE_DATA( CONN );
UTL_SMTP.QUIT( CONN );
END;—————————-
SET SERVEROUTPUT ON SIZE 1000000
declare
v_linha varchar2(300);
v_cabeca varchar(200);
v_rodape varchar(200);
v_div varchar2(200);
v_dia varchar2(3);
v_dia0 varchar2(3);
v_corpo varchar2(20000);
v_database varchar2(50);cursor cur_log is
SELECT decode(status,’COMPLETED’,’ OK ‘,’FAIL’) status,
session_key KEY,
decode(to_char(start_time, ‘d’),
1,
‘DOMINGO’,
2,
‘SEGUNDA’,
3,
‘TERCA’,
4,
‘QUARTA’,
5,
‘QUINTA’,
6,
‘SEXTA’,
7,
‘SABADO’) DIA_SEMANA,
to_char(start_time, ‘dd-mm-yy hh24:mi:ss’) start_time,
to_char(end_time, ‘dd-mm-yy hh24:mi:ss’) end_time,
time_taken_display TEMPO_TOTAL,
input_type,
output_device_type device,
input_bytes_display ENTRADA,
output_bytes_display SAIDA,
output_bytes_per_sec_display TAXA_SEGUNDOS
FROM v$rman_backup_job_details
where trunc(start_time) > trunc(sysdate – 2)
order by START_TIME;begin
v_dia0:=”;
v_dia:=”;
v_div:=rpad(‘-‘,98,’-‘);select name into v_database from v$database;
v_cabeca:=’Log de backup do RMAN – [ ‘||v_database||’ ]’ ||chr(10)||chr(10);
v_cabeca:= v_cabeca ||'[ DIA | INICIO | FINAL | TEMPO | STAT | TIPO | DEVICE | TAMANHO ]’;
dbms_output.put_line(v_cabeca);v_corpo:=v_cabeca || chr(10);
for x in cur_log loop
v_dia:=substr(x.dia_semana,1,3);
if v_dia0 = v_dia then
v_linha:=”;
else
v_linha:=v_div || chr(10);
v_dia0 := v_dia;
end if;
v_linha:=v_linha || ‘[ ‘ || v_dia;
v_linha:=v_linha || ‘ | ‘ || x.start_time || ‘ | ‘ || x.end_time || ‘ | ‘ || x.TEMPO_TOTAL || ‘ | ‘ || x.status;
v_linha:=v_linha || ‘ | ‘ || rpad(x.input_type,6) || ‘ | ‘ || rpad(x.device,8) || ‘ | ‘ || lpad(x.saida,10) || ‘ ]’;
dbms_output.put_line(v_linha);
v_corpo:=v_corpo || v_linha || chr(10);
end loop;
v_rodape:=’Enviado por prc_dba_monitora_backup’ || chr(10) || chr(10) || to_char(sysdate,’dd-mm-yyyy hh24:mi’);
dbms_output.put_line(v_rodape);
v_corpo:=v_corpo || v_div || chr(10);
v_corpo:=v_corpo || v_rodape || chr(10);prc_envia_email(‘sergio.oliveira@apoio.br’,’sergiomso@gmail.com’,’Log de backup – RMAN – ‘|| v_database,v_corpo);
end;
/26 de março de 2018 at 8:14 pm #109253José Laurindo ChiappaModeratorBlz ? A msg parece ser clara : foi o SERVIDOR SMTP que rejeitou tua conexão, NADA A VER com o RDBMS Oracle em si…. Cheque com o Administrador desse servidor SMTP aí pra pegar os detalhes, mas uma Possibilidade Muito Muito Provável dada essa msg é que esse serviço SMTP esteja exigindo alguma sintaxe específica pros remetentes : por exemplo, uma sintaxe comum de ser Exigida é o nome da conta de email entre ” , tipo usar ‘”Nome Completo do usuário” ‘ ou mesmo ‘meuemail@meuservidor.com.br ‘ …. Não tem jeito, vc TEM que checar com o seu Administrador qual setting/syntax está sendo Exigida….
E NEM PRECISO DIZER :
=> óbvio#1, pra evitar spam e Personificação (ie, mandar emails em nome de outrem) Também é via de regra EXIGIDO que o remetente SEJA o mesmo usuário que conectou via smtp, e/ou que o remetente indicado TENHA SIM sido criado certinho no serviço SMTP, esteja VÁLIDO E tenha recebido privilégios de envio de email …
=> óbvio#2, Tranquilamente Pode ser que a falha seja na tentativa de login em si : DIFICILMENTE um Administratdor deixa o serviço SMTP totalmente Aberto, sem nenhum tipo de SSL, e/ou de verificação de programa cliente (certa vez encontrei um servidor onde só se podia conectar se o serviço SMTP detectasse que vc estava usando o OUTLOOK), e/ou o ip de origem esteja numa invite list, coisas assim… NOVAMENTE, só teu Administrador de Emails pode Confirmar ou Negar coisas do tipo…
[]s
Chiappa
OBS : um teste simples que vc pode fazer é conectar no servidor de email SMTP via telnet e MANUALMENTE mandar os comandos todos (EHLO, CONNECT, MAISL, etc) manualmente : https://community.spiceworks.com/how_to/11-test-email-flow-using-smtp-commandsé um exemplo…
27 de março de 2018 at 6:36 pm #109254airoospParticipantSérgio,
Verifiquei a procedure que você postou, a mensagem de erro apareceu porque os parâmetros da procedure que envia e-mail estão invertidos em relação ao que é passado.
Na chamada da procedure:
prc_envia_email(‘sergio.oliveira@apoio.br’,’sergiomso@gmail.com’,’Log de backup – RMAN – ‘|| v_database,v_corpo);
Você esta passando nos 2 primeiros parâmetros os e-mails, depois assunto e por último a mensagem.
Procedure original:
“PRC_ENVIA_EMAIL”
(
P_MESSAGE IN VARCHAR2,
P_EMAIL_ORIG IN VARCHAR2,
P_EMAIL_DEST IN VARCHAR2,
P_ASSUNTO IN VARCHAR2
)Procedure corrigida:
(
P_EMAIL_ORIG IN VARCHAR2,
P_EMAIL_DEST IN VARCHAR2,
P_ASSUNTO IN VARCHAR2,
P_MESSAGE IN VARCHAR2
)E também no corpo a procedure é informado duas vezes o e-mail P_EMAIL_DEST, veja abaixo:
/* Comunicando SMTP */
UTL_SMTP.HELO( CONN, cSMTP_SERVER );
UTL_SMTP.MAIL( CONN, P_EMAIL_DEST );
UTL_SMTP.RCPT( CONN, P_EMAIL_DEST );
UTL_SMTP.OPEN_DATA ( CONN );Corrigido:
/* Comunicando SMTP */
UTL_SMTP.HELO( CONN, cSMTP_SERVER );
UTL_SMTP.MAIL( CONN, P_EMAIL_ORIG );
UTL_SMTP.RCPT( CONN, P_EMAIL_DEST );
UTL_SMTP.OPEN_DATA ( CONN );Veja se depois das alterações o processo funciona.
Abraço,
Airton
29 de março de 2018 at 4:45 pm #109257José Laurindo ChiappaModeratorAtt. Sergio :
colega, eu tinha respondido só baseado nas msgs, nem tinha lido o código-fonte da procedure : vc olhou os pontos questionáveis dentro do fonte dessa procedure indicados pelo Airo ?? Se sim e não resolveu, vc obteve com o admin as infos/configs que citei ? testou o acesso via telnet enviando um a um os mesmos comandos que a procedure ??
Dando certo ou não, retorna pra gente, pra não ficarmos curiosos a respeito…
[]s
Chiappa
-
AuthorPosts
- You must be logged in to reply to this topic.