Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE PROCEDURE sp_envia_email_centerbox(
- --psNomeUsuEmail In Varchar2,
- --psRemetente In Varchar2,
- psDestinatario IN LONG,
- --psMailHost In Varchar2,
- --pnNroPorta In Integer Default 25,
- psAssunto IN VARCHAR2,
- psMensagem IN Clob
- --psIndAutentica In Varchar2,
- --psUsuario In Varchar2,
- --psSenha In Varchar2,
- --psIndUsaHTML In Varchar2
- )
- IS
- -- Variaveis internas
- vConect UTL_SMTP.Connection;
- Msg RAW(32000);
- vnContador INTEGER;
- vnInicio INTEGER;
- mReplies UTL_SMTP.Replies;
- mAuthStr VARCHAR2(1024);
- psRemetente VARCHAR2(50) :='centerbox@centerbox.com.br';
- psIndAutentica VARCHAR2(1) :='S';
- psIndUsaHTML VARCHAR2(1) :='S';
- psUsuario VARCHAR2(50) :='srvora01@centerbox.com.br';
- psSenha VARCHAR2(50) :='ebox12345';
- pnNroPorta INTEGER(3) :=587;
- psMailHost VARCHAR2(30) :='mail.centerbox.com.br';
- psNomeUsuEmail VARCHAR2(30) :='[CENTERBOX]';
- BEGIN
- -- Valida os dados de entrada
- IF (psRemetente IS NULL) THEN
- Raise_Application_Error(-20200, 'O e-mail do remetente não foi informado!');
- ELSIF (psDestinatario IS NULL) THEN
- Raise_Application_Error(-20200, 'O e-mail do destinatário não foi informado!');
- END IF;
- -- Abre conexão com o servidor SMTP. Porta Padrão: 25
- vConect := UTL_SMTP.Open_Connection(psMailHost, pnNroPorta);
- UTL_SMTP.Helo(vConect, psMailHost);
- IF (psIndAutentica = 'S' AND psUsuario IS NOT NULL AND psSenha IS NOT NULL) THEN
- mReplies := UTL_SMTP.Command_Replies(vConect, 'AUTH LOGIN');
- mAuthStr := UTL_ENCODE.Base64_Encode(UTL_RAW.Cast_To_Raw(psUsuario));
- mAuthStr := UTL_RAW.Cast_To_Varchar2(mAuthStr);
- mAuthStr := REPLACE(mAuthStr, CHR(13), '');
- mAuthStr := REPLACE(mAuthStr, CHR(10), '');
- mReplies := UTL_SMTP.Command_Replies(vConect, mAuthStr);
- mAuthStr := UTL_ENCODE.Base64_Encode(UTL_RAW.Cast_To_Raw(psSenha));
- mAuthStr := UTL_RAW.Cast_To_Varchar2(mAuthStr);
- mAuthStr := REPLACE(mAuthStr, CHR(13), '');
- mAuthStr := REPLACE(mAuthStr, CHR(10), '');
- mReplies := UTL_SMTP.Command_Replies(vConect, mAuthStr);
- END IF;
- -- Define o e-mail do REMETENTE
- UTL_SMTP.Mail(vConect, ('<' || psRemetente || '>'));
- -- Monta linha DESTINATARIO (separa com ';' se existir mais de um)
- BEGIN
- FOR vtEmail IN (SELECT Column_Value Email
- FROM TABLE(CAST(C5_Complexin.C5intable(REPLACE(REPLACE(REPLACE(TRIM(psDestinatario), CHR(13), NULL), CHR(10), NULL), ';', ',')) AS C5instrtable)))
- LOOP
- UTL_SMTP.Rcpt(vConect, ('<' || vtEmail.Email || '>'));
- END LOOP;
- EXCEPTION
- WHEN OTHERS THEN
- Raise_Application_Error(-20000, 'Erro no e-mail do destinatário: ' || SQLERRM);
- END;
- -- Monta CABEÇALHO do e-mail
- UTL_SMTP.Open_Data(vConect);
- UTL_SMTP.Write_Data(vConect, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || UTL_TCP.Crlf);
- UTL_SMTP.Write_Data(vConect, 'From: "' || psNomeUsuEmail || '" <' || psRemetente || '>' || UTL_TCP.Crlf);
- UTL_SMTP.Write_Data(vConect, 'Subject: ' || psAssunto || UTL_TCP.Crlf);
- UTL_SMTP.Write_Data(vConect, 'To: ' || REPLACE(REPLACE(REPLACE(TRIM(psDestinatario), CHR(13), NULL), CHR(10), NULL), ';', ',') || UTL_TCP.Crlf);
- -- Usa HTML conforme parâmetro
- IF (psIndUsaHTML = 'S') THEN
- UTL_SMTP.Write_Data(vConect, 'Content-Type: text/html; charset=iso-8859-1' || UTL_TCP.Crlf);
- END IF;
- -- Monta CORPO e-mail
- UTL_SMTP.Write_Data(vConect, '' || UTL_TCP.Crlf);
- -- Ajusta conforme tamanho da MENSAGEM
- vnContador := LENGTH(psMensagem);
- vnInicio := 0;
- WHILE vnContador > 0
- LOOP
- Msg := UTL_RAW.Cast_To_Raw(UTL_TCP.Crlf || SUBSTR(psMensagem, vnInicio, 30000));
- UTL_SMTP.Write_Raw_Data(vConect, Msg);
- vnInicio := vnInicio + 30000;
- vnContador := vnContador - 30000;
- END LOOP;
- -- Fecha conexão servidor SMTP
- UTL_SMTP.Close_Data(vConect);
- UTL_SMTP.Quit(vConect);
- -- Tratamento de ERRO geral
- EXCEPTION
- WHEN OTHERS THEN
- Raise_Application_Error(-20200, 'Erro ao enviar e-mail: ' || SQLERRM);
- END sp_envia_email_centerbox;
Add Comment
Please, Sign In to add comment