Oracle SMTP does not send hidden copy (BCC)

Asked

Viewed 110 times

0

I’m trying to send a "Blind Copy" by our Email Sending Procedure by documentation would be ok , but is not sending or generating any error , the code is below , the sensitive items were exchanged for "x"

What could I be doing wrong ?

SP :

create or replace PROCEDURE ENVIA_EMAIL_CLOBHBC (ds_email_origem_w varchar2,
                                               ds_email_destino_p varchar2,
                                               ds_assunto       varchar2,
                                               p_attach_clob IN CLOB DEFAULT NULL,
                                               p_httm in varchar2 default 'S',
                                               p_log out varchar2,                                                        
                                               p_nome_destino in varchar2 default null) is


  l_step        PLS_INTEGER  := 12000; 
  ds_smtp_w varchar2(20) := 'xx.xx.x.xx';
  /* Abre conex?o SMTP e HTTP */
  CONEXAO UTL_SMTP.CONNECTION;

  vs_origem varchar2(100) := ds_email_origem_w;
  --
  vs_para  varchar2(100);
  vs_cc    varchar2(100);
  --

  PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS
  BEGIN
    UTL_SMTP.WRITE_DATA(CONEXAO, name || ': ' || header || UTL_TCP.CRLF);
  END;

BEGIN
  /* Abre conex?o com um Servidor SMTP(Simple Mail Transfer Protocol), porta padr?o SMTP e 25 */
  CONEXAO := utl_smtp.open_connection (ds_smtp_w,25);
  UTL_SMTP.HELO (CONEXAO, ds_smtp_w); /* Endereco 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, ('<' || vs_origem          || '>')); /* E-mail de quem esta mandando */
  -- se estiver em lista separado por ";" manda para o 1º como "para" e para o 2º como CC (copia)
  /* Para quem vou mandar */
  IF INSTR(ds_email_destino_p,';') = 0 THEN 
    vs_para  := ds_email_destino_p;
    UTL_SMTP.RCPT (CONEXAO, ('<' || ds_email_destino_p || '>')); /* Para quem vou mandar */
  ELSE
    vs_para  := SUBSTR(ds_email_destino_p,1,INSTR(ds_email_destino_p,';')-1);
    vs_cc    := SUBSTR(ds_email_destino_p,INSTR(ds_email_destino_p,';')+1,length(ds_email_destino_p));
    UTL_SMTP.RCPT (CONEXAO, ('<' || vs_para || '>')); /* Para quem vou mandar original */
    UTL_SMTP.RCPT (CONEXAO, ('<' || vs_cc || '>')); /* Para quem vou mandar copia */
  END IF;
  UTL_SMTP.OPEN_DATA(CONEXAO); 

  If upper(p_httm) <> 'S' Then  
    send_header('Subject','=?iso-8859-1?Q?' ||UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(ds_assunto))));
  Else  
    --send_header('Subject','=?iso-8859-1?Q?' ||UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(ds_assunto)))|| '?=');
    send_header('Subject',UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(ds_assunto))));
  end if;

  If upper(p_httm) <> 'S' Then  
    UTL_SMTP.write_data(CONEXAO, 'Content-Type: text/html; charset="UTF-8"'   || utl_tcp.CRLF);
  Else  
    UTL_SMTP.write_data(CONEXAO, 'Content-Type: text/html; charset="UTF-8"'  || utl_tcp.CRLF );
  end if;    

  send_header('From',ds_email_origem_w);

  --se denominou o destino formata o envio , senão vai o proprio email
  --tratamento diferente do "from" pois este é em geral dinamico
  --feito pela stored procedure  chamadora
  if trim(p_nome_destino) is null then
    send_header('To',vs_para);
  else
    send_header('To','"'||trim(p_nome_destino)||'" <'||vs_para||'>');
  end if;  

  If Trim(vs_cc) is not null Then--copia (nao formata o destino)
    send_header('CC',vs_cc);
  end if;

  send_header('BCC',vs_origem);---<<< A LINHA COM PROBLEMA PARECE SER ESTA ***********************

  FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_attach_clob) - 1 )/l_step) 
  LOOP
    UTL_SMTP.WRITE_DATA(CONEXAO, DBMS_LOB.substr(p_attach_clob, l_step, i * l_step + 1));    
  END LOOP;

  UTL_SMTP.CLOSE_DATA(CONEXAO);
  UTL_SMTP.QUIT (CONEXAO);
Exception
  when OTHERS then
    utl_smtp.quit (conexao);
    p_log := 'Erro: ' || SQLERRM;
END ENVIA_EMAIL_CLOBHBC;

1 answer

0

if I ever help anyone ...

in the piece

ELSE
    vs_para  := SUBSTR(ds_email_destino_p,1,INSTR(ds_email_destino_p,';')-1);
    vs_cc    := SUBSTR(ds_email_destino_p,INSTR(ds_email_destino_p,';')+1,length(ds_email_destino_p));
    UTL_SMTP.RCPT (CONEXAO, ('<' || vs_para || '>')); /* Para quem vou mandar original */
    UTL_SMTP.RCPT (CONEXAO, ('<' || vs_cc || '>')); /* Para quem vou mandar copia */
  END IF;

do

ELSE
    vs_para  := SUBSTR(ds_email_destino_p,1,INSTR(ds_email_destino_p,';')-1);
    vs_cc    := SUBSTR(ds_email_destino_p,INSTR(ds_email_destino_p,';')+1,length(ds_email_destino_p));
    UTL_SMTP.RCPT (CONEXAO, ('<' || vs_para || '>')); /* Para quem vou mandar original */
    UTL_SMTP.RCPT (CONEXAO, ('<' || vs_cc || '>')); /* Para quem vou mandar copia */
    UTL_SMTP.RCPT (CONEXAO, ('<' || vs_origem || '>')); /* Para quem vou mandar copia oculta */     
END IF;

Browser other questions tagged

You are not signed in. Login or sign up in order to post.