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;