Pular para o conteúdo
  • This topic has 3 replies, 3 voices, and was last updated 6 years, 7 months ago by Avatar photoJosé Laurindo Chiappa.
Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #109252
    Avatar de sergiomsosergiomso
    Participant

      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 75

      Muito 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;
      /

      #109253
      Avatar photoJosé Laurindo Chiappa
      Moderator

        Blz ? 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…

        #109254
        Avatar de airoospairoosp
        Participant

          Sé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

          #109257
          Avatar photoJosé Laurindo Chiappa
          Moderator

            Att. 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

          Viewing 4 posts - 1 through 4 (of 4 total)
          • You must be logged in to reply to this topic.
          plugins premium WordPress