HTML Email com anexo

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
antoniock
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qui, 11 Set 2014 11:17 am

Pessoal tenho a seguinte proc para enviar email em formato HTML com anexo. Meu problema é que o anexo não é atachado no email como um arquivo a parte. O email é gerado como o HTML mas o conteúdo do anexo segue no corpo do email.

O que esta faltando para que o anexo seja atachado como arquivo?

Selecionar tudo

create or replace procedure PRC_HTML_EMAIL_COM_ANEXO(p_to      in varchar2,
                                                     p_from    in varchar2,
                                                     p_subject in varchar2,
                                                     p_text    in varchar2 default null,
                                                     p_html    in clob,
                                                     p_anexo   in clob,
                                                     p_nmanexo in varchar2,
                                                     p_tamanhoarq in PLS_INTEGER,
                                                     p_smtp_hostname in varchar2,
                                                     p_smtp_portnum  in varchar2) is
    l_STEP       PLS_INTEGER := 831; --24573;
    l_ate        PLS_INTEGER;
--    l_tamanhoarq PLS_INTEGER;


    l_boundary      varchar2(255) default 'a1b2c3d4e3f2g1';
    v_conexion_tcp  utl_tcp.connection;
    l_connection    utl_smtp.connection;
    l_body_html     clob := empty_clob;  --This LOB will be the email message
    l_offset        number;
    l_ammount       number;
    l_temp          varchar2(32767) default null;
    crlf            VARCHAR2(2) := chr(13) || chr(10);
begin
   v_conexion_tcp               := utl_tcp.open_connection(remote_host => p_smtp_hostname,
                                                     remote_port => p_smtp_portnum,
                                                     charset     => 'AL32UTF8');
   l_connection.host            := v_conexion_tcp.remote_host;
   l_connection.port            := v_conexion_tcp.remote_port;
   l_connection.tx_timeout      := v_conexion_tcp.tx_timeout;
   l_connection.private_state   := NULL;
   l_connection.private_tcp_con := v_conexion_tcp; -- conexão tem que ser desta forma, do contrário o texto não é acentuado

--    l_connection := utl_smtp.open_connection( p_smtp_hostname, p_smtp_portnum );
    utl_smtp.helo( l_connection, p_smtp_hostname );
    utl_smtp.mail( l_connection, p_from );
    utl_smtp.rcpt( l_connection, p_to );

    l_temp := l_temp || 'MIME-Version: 1.0' ||  chr(13) || chr(10);
    l_temp := l_temp || 'To: ' || p_to || chr(13) || chr(10);
    l_temp := l_temp || 'From: ' || p_from || chr(13) || chr(10);
    l_temp := l_temp || 'Subject: ' || p_subject || chr(13) || chr(10);
    l_temp := l_temp || 'Reply-To: ' || p_from ||  chr(13) || chr(10);
    l_temp := l_temp || 'Content-Type: multipart/mixed; boundary=' || 
                         chr(34) || l_boundary ||  chr(34) || chr(13) || 
                         chr(10);

    ----------------------------------------------------
    -- Write the headers
    dbms_lob.createtemporary( l_body_html, false, 10 );
    dbms_lob.write(l_body_html,length(l_temp),1,l_temp);
 

    ----------------------------------------------------
    -- Write the text boundary
    l_offset := dbms_lob.getlength(l_body_html) + 1;
    l_temp   := '--' || l_boundary || chr(13)||chr(10);
    l_temp   := l_temp || 'content-type: text/plain; charset=us-ascii' || 
                  chr(13) || chr(10) || chr(13) || chr(10);
    dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp);


    ----------------------------------------------------
    -- Write the plain text portion of the email
    l_offset := dbms_lob.getlength(l_body_html) + 1;
    dbms_lob.write(l_body_html,length(p_text),l_offset,p_text);

    ----------------------------------------------------
    -- Write the HTML boundary
    l_temp   := chr(13)||chr(10)||chr(13)||chr(10)||'--' || l_boundary || 
                    chr(13) || chr(10);
    l_temp   := l_temp || 'content-type: text/html;' || 
                   chr(13) || chr(10) || chr(13) || chr(10);
    l_offset := dbms_lob.getlength(l_body_html) + 1;
    dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp);

    ----------------------------------------------------
    -- Write the HTML portion of the message
    l_offset := dbms_lob.getlength(l_body_html) + 1;
--    dbms_lob.write(l_body_html,length(p_html),l_offset,p_html);
    dbms_lob.copy(l_body_html, p_html,dbms_lob.getlength(p_html), l_offset, 1);                 

    ----------------------------------------------------
    -- Write the final html boundary
    l_temp   := chr(13) || chr(10) || '--' ||  l_boundary || '--' || chr(13);
    l_offset := dbms_lob.getlength(l_body_html) + 1;
    dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp);

    ----------------------------------------------------
    -- Send the email in 1900 byte chunks to UTL_SMTP
    l_offset  := 1;
    l_ammount := 1900;
    utl_smtp.open_data(l_connection);
    while l_offset < dbms_lob.getlength(l_body_html) loop
        utl_smtp.write_data(l_connection,
                            dbms_lob.substr(l_body_html,l_ammount,l_offset));
        l_offset  := l_offset + l_ammount ;
        l_ammount := least(1900,dbms_lob.getlength(l_body_html) - l_ammount);
    end loop;

    -- Attach Info
    utl_smtp.write_raw_data(l_connection, utl_raw.cast_to_raw('--SECBOUND' || crlf));
    utl_smtp.write_raw_data(l_connection, utl_raw.cast_to_raw('Content-Type: text/plain ' || 
                            ' name="'|| p_nmanexo || '"' || crlf));
    utl_smtp.write_raw_data(l_connection, utl_raw.cast_to_raw('Content-Disposition: attachment; filename="'
                            || p_nmanexo || '"' || crlf || crlf));

    -- Attach body
    l_offset := 1;
    l_ammount := 1900;
    WHILE l_offset < p_tamanhoarq LOOP
        utl_smtp.write_raw_data(l_connection, utl_raw.cast_to_raw(dbms_lob.substr(p_anexo, l_ammount, l_offset)));
        l_offset := l_offset + l_ammount;
    END LOOP;
    utl_smtp.write_raw_data(l_connection, utl_raw.cast_to_raw('' || crlf));
  -- Last boundry
    utl_smtp.write_raw_data(l_connection, utl_raw.cast_to_raw('--SECBOUND--' || crlf));

 
  utl_smtp.close_data(l_connection);
--   utl_smtp.quit(l_connection);
   utl_tcp.close_connection(v_conexion_tcp);
   dbms_lob.freetemporary(l_body_html);
 end PRC_HTML_EMAIL_COM_ANEXO;
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

maxwbh
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 21 Out 2014 5:16 pm
Localização: Belo Horizonte - MG
Maxwell da Silva Oliveira
(31) 9325.7479/ 9474.8854
maxwbh@gmail.com
http://lnkd.in/PkcQ5y

Utilizo esta procedure para realizar a tarefa!

Selecionar tudo

/*
   Maxwell  da Silva Oliveira
   (31) 9325.7479/ 9474.8854 
   maxwbh@gmail.com
   http://br.linkedin.com/in/maxwbh
*/
CREATE OR REPLACE PROCEDURE PRD_ENVIA_EMAIL(pusuario      IN VARCHAR2,
                                               psenha        IN VARCHAR2,
                                               pde           IN VARCHAR2,
                                               ppara         IN VARCHAR2,
                                               passunto      IN VARCHAR2,
                                               body          IN VARCHAR2,
                                               p_attach_name IN VARCHAR2 DEFAULT NULL,
                                               p_attach_mime IN VARCHAR2 DEFAULT 'application/pdf', --PDF  ( Verificar mime type em http://www.iana.org/assignments/media-types ) ,
                                               p_attach_blob IN BLOB DEFAULT NULL) IS

    -- Autor    : Maxwell da Silva Oliveira
    -- Data     : 06/02/2013
    -- Objetivo : Envia e-mail com arquivo anexo


    vconexao   utl_smtp.connection; --Guarda a Conexao com o servidor
    l_boundary VARCHAR2(50) := '----=*#abc1234321cba#*=';
    l_step     PLS_INTEGER := 57;
    v_raw      RAW(57);
    v_length   INTEGER := 0;
    v_offset   INTEGER := 1;

    -- Seta as variávels para conexão do servidor
    v_smtp_server VARCHAR2(100) := 'IP_DO_SERVIDOR';
    v_smtp_domain VARCHAR2(80) := 'SERVER_NAME';

    -- Variavel para tratar mais de um destinatario
    v_listadestinatarios VARCHAR2(2000) := ppara;
    v_destinatario       VARCHAR2(80) := '';

    /*Adiciona informações do cabeçalho*/
    PROCEDURE send_header(NAME IN VARCHAR2, header IN VARCHAR2) AS
    BEGIN
        utl_smtp.write_data(vconexao, NAME || ': ' || header || utl_tcp.crlf);
    END;

--- Converte ASC2 para HTML 
FUNCTION asc2html(str1 IN VARCHAR2) RETURN VARCHAR2 is
    pos     INT;
    chars_s VARCHAR2(255)  := '¡,¢,£,¤,¥,¦,§,¨,©,ª,«,¬,®,¯,°,±,²,³,´,µ,¶,·,¸,¹,º,»,¼,½,¾,¿,À,Á,Â,Ã,Ä,Å,Æ,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ð,não,Ò,Ó,Ô,Õ,Ö,×,Ø,Ù,Ú,Û,Ü,Ý,Þ,ß,à,á,â,ã,ä,å,æ,ç,è,é,ê,ë,ì,í,î,ï,ð,não,ò,ó,ô,õ,ö,÷,ø,ù,ú,û,ü,ý,þ,ÿ,¿,¿,¿,¿,¿,¿,¿,`,¿,¿,¿,¿,¿,¿,¿,¿,¿,¿,¿,¿';
    chars_r VARCHAR2(2000) := '&#161;,&#162;,&#163;,&#164;,&#165;,&#166;,&#167;,&#168;,&#169;,&#170;,&#171;,&#172;,&#174;,&#175;,&#176;,&#177;,&#178;,&#179;,&#180;,&#181;,&#182;,&#183;,&#184;,&#185;,&#186;,&#187;,&#188;,&#189;,&#190;,&#191;,&#192;,&#193;,&#194;,&#195;,&#196;,&#197;,&#198;,&#199;,&#200;,&#201;,&#202;,&#203;,&#204;,&#205;,&#206;,&#207;,&#208;,&#209;,&#210;,&#211;,&#212;,&#213;,&#214;,&#215;,&#216;,&#217;,&#218;,&#219;,&#220;,&#221;,&#222;,&#223;,&#224;,&#225;,&#226;,&#227;,&#228;,&#229;,&#230;,&#231;,&#232;,&#233;,&#234;,&#235;,&#236;,&#237;,&#238;,&#239;,&#240;,&#241;,&#242;,&#243;,&#244;,&#245;,&#246;,&#247;,&#248;,&#249;,&#250;,&#251;,&#252;,&#253;,&#254;,&#255;,&#338;,&#339;,&#352;,&#353;,&#402;,&#8211;,&#8212;,&#8216;,&#8217;,&#8218;,&#8220;,&#8221;,&#8222;,&#8224;,&#8225;,&#8226;,&#8230;,&#8240;,&#8364;,&#8482;';
    str     VARCHAR2(3000);
    strproc VARCHAR2(3000);
    strsub  VARCHAR2(3000);
BEGIN
    str := str1;
    pos := 1;
    WHILE instr(chars_s, ',', 1, pos) > 0 LOOP
        SELECT substr(chars_s,
                      decode(pos, 1, 1, instr(chars_s, ',', 1, pos - 1) + 1),
                      decode(pos,
                             1,
                             instr(chars_s, ',', 1, pos) - 1,
                             instr(chars_s, ',', 1, pos) - instr(chars_s, ',', 1, pos - 1) - 1)),
               substr(chars_r,
                      decode(pos, 1, 1, instr(chars_r, ',', 1, pos - 1) + 1),
                      decode(pos,
                             1,
                             instr(chars_r, ',', 1, pos) - 1,
                             instr(chars_r, ',', 1, pos) - instr(chars_r, ',', 1, pos - 1) - 1))                             
          INTO strproc, strsub
          FROM dual;
        -- dbms_output.put_line(' Pos.: ' || pos || ' Proc :' || strproc || ' Sub:' || strsub);
        pos := pos + 1;
        str := REPLACE(str, strproc, strsub);
    END LOOP;
    RETURN str;
END;
BEGIN
    /*Setando conexão com o servidor*/
    vconexao := utl_smtp.open_connection(v_smtp_server, 25);
    utl_smtp.helo(vconexao, v_smtp_domain);

    /*Envio de e-mail com autenticação.*/
    utl_smtp.command(vconexao, 'AUTH LOGIN');
    utl_smtp.command(vconexao,
                     utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw((pusuario)))));
    utl_smtp.command(vconexao,
                     utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw((psenha)))));

    /*Informando Remetente e Destinatário*/
    utl_smtp.mail(vconexao, pde);
    v_listadestinatarios := ppara;
    
    LOOP
        IF instr(v_listadestinatarios, ',') > 0 THEN
            v_destinatario       := substr(v_listadestinatarios,
                                           1,
                                           instr(v_listadestinatarios, ',') - 1);
            v_listadestinatarios := substr(v_listadestinatarios,
                                           instr(v_listadestinatarios, ',') + 1,
                                           length(v_listadestinatarios));
        ELSE
            v_destinatario       := v_listadestinatarios;
            v_listadestinatarios := '';
        END IF;
        IF rtrim(v_destinatario) IS NOT NULL THEN
            utl_smtp.rcpt(vconexao, v_destinatario);
        END IF;
        EXIT WHEN rtrim(v_listadestinatarios) IS NULL;
    END LOOP;
    --utl_smtp.rcpt(vConexao, pPara);

    /*Informando Dados do Cabeçalho*/
    utl_smtp.open_data(vconexao);
    send_header('From', '"' || pde || '" <' || pde || '>');

    v_listadestinatarios := ppara;
    LOOP
        IF instr(v_listadestinatarios, ',') > 0 THEN
            v_destinatario       := substr(v_listadestinatarios,
                                           1,
                                           instr(v_listadestinatarios, ',') - 1);
            v_listadestinatarios := substr(v_listadestinatarios,
                                           instr(v_listadestinatarios, ',') + 1,
                                           length(v_listadestinatarios));
        ELSE
            v_destinatario       := v_listadestinatarios;
            v_listadestinatarios := '';
        END IF;
        IF v_destinatario IS NOT NULL THEN
            send_header('To', '"' || v_destinatario || '" <' || v_destinatario || '>');
        END IF;
        EXIT WHEN rtrim(v_listadestinatarios) IS NULL;
    END LOOP;

    send_header('Subject', passunto);

    /*É necessário informar os caracteres <CR><LF> como terminador das linhas*/
    /*Utilizar a linha abaixo quando for enviado um texto html*/
    utl_smtp.write_data(vconexao, 'MIME-Version: 1.0' || utl_tcp.crlf);
    utl_smtp.write_data(vconexao,
                        'Content-Type: multipart/alternative; boundary="' || l_boundary || '"' ||
                        utl_tcp.crlf || utl_tcp.crlf);
    utl_smtp.write_data(vconexao, '--' || l_boundary || utl_tcp.crlf);

    utl_smtp.write_data(vconexao,
                        'Content-Type: text/html; charset="UTF-8"' || utl_tcp.crlf || utl_tcp.crlf);

    /*Anexar o corpo da mensagem*/
    utl_smtp.write_data(vconexao, [b]asc2html(BODY )[/b]);
    utl_smtp.write_data(vconexao, utl_tcp.crlf || utl_tcp.crlf);
--    utl_smtp.write_data(vconexao, '--' || l_boundary || '--' || utl_tcp.crlf);

   [b][i] /*Anexar arquivo na mensagem */[/i][/b]
    IF p_attach_name IS NOT NULL
       AND p_attach_blob IS NOT NULL THEN
        utl_smtp.write_data(vconexao, '--' || l_boundary || utl_tcp.crlf);
        utl_smtp.write_data(vconexao, 'Content-Type: ' || p_attach_mime || '; name="' || p_attach_name || '"' ||utl_tcp.crlf);
        utl_smtp.write_data(vconexao, 'Content-Transfer-Encoding: base64' || utl_tcp.crlf);
        utl_smtp.write_data(vconexao, 'Content-Disposition: attachment; filename="' || p_attach_name || '"' || utl_tcp.crlf || utl_tcp.crlf);
    
        v_length := dbms_lob.getlength(p_attach_blob);
    
        <<while_loop>>
        WHILE v_offset < v_length LOOP
            dbms_lob.read(p_attach_blob, l_step, v_offset, v_raw);
            utl_smtp.write_raw_data(vconexao, utl_encode.base64_encode(v_raw));
            utl_smtp.write_data(vconexao, utl_tcp.crlf);
            v_offset := v_offset + l_step;
        END LOOP while_loop;
    END IF;

    utl_smtp.write_data(vconexao, utl_tcp.crlf || utl_tcp.crlf);
    utl_smtp.write_data(vconexao, '--' || l_boundary || '--' || utl_tcp.crlf);

    /*Fechar a entrada de dados*/
    utl_smtp.close_data(vconexao);

    /*Enviar o email*/
    utl_smtp.quit(vconexao);
EXCEPTION
    WHEN utl_smtp.transient_error
         OR utl_smtp.permanent_error THEN
        utl_smtp.quit(vconexao);
        raise_application_error(-20000, 'Erro ao tentar enviar e-mail: ' || SQLERRM);
END;
mih_cns
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 25 Jun 2015 11:06 am

Hei maxwbh.
Estou utilizando uma procedure parecida com a sua, ele está enviando o arquivo, mas ele mostra o html também.
Você poderia me ajudar descobrir onde está o erro?

O arquivo está saindo assim:

Selecionar tudo

#006699">SIGLA &nbsp;&nbsp;&nbsp;&nbsp;</font></th>
            <th><font color = "#006699">NOME DO SISTEMA &nbsp; &nbsp;&nbsp;&nbsp;</font></th>
            <th><font color = "#006699">FASE &nbsp; &nbsp;&nbsp;&nbsp;</font></th>
            <th><font color = "#006699">DATA FASE ATUAL &nbsp; &nbsp;&nbsp;&nbsp;</font></th>
            </tr><tr>
        <td>   </td>
        <td>   </td> 
        <td>   </td> 
        <td>   </td>

Selecionar tudo

create or replace package body PKG_MAIL_TESTE is
  -- Autor    : DANIELRJ / BERKELEY
  -- Criação  : 02/07/2003 14:26:55
  -- Objetivo : Envio de e-mail a partir do Oracle.

  -- Variáveis privadas "package-level"
    vSender      varchar2(2000);
    vRecipient   varchar2(2000);
    vCcRecipient varchar2(2000);
    vMailHost    varchar2(2000);
    vSubject     varchar2(2000);
    vCRLF        varchar2(2) := chr(13)||chr(10);

    TYPE reply IS RECORD (
         code PLS_INTEGER, -- 3-digit reply code
         text VARCHAR2(508) -- text message
                          );

  -- =============
  -- ### TESTE ###
  -- =============

  procedure PRD_SEND_MAIL(
                  pSender      in varchar2,
                  pRecipient   in varchar2,
                  pMailHost    in varchar2 DEFAULT 'smtp-appl1.senado.gov.br',
                  pCcRecipient in varchar2 DEFAULT null,
                  pSubject     in varchar2,
                  pMessage     CLOB,
                  pStatus      in out nocopy varchar2)


   is

     vMessage      CLOB := pMessage;
      vHost        varchar2(100) := 'smtp-appl1.senado.gov.br';
      vCcRecipient varchar2(100)   := pCcRecipient;
      vConnection  utl_smtp.connection;
      v_Mail_Conn  utl_smtp.Connection;
      crlf         VARCHAR2(2)  := chr(13)||chr(10);
      vReply       reply;
      c_mime_boundary CONSTANT VARCHAR2(256) := '-----AABCDEFBBCCC0123456789DE';
      v_clob                   CLOB := EMPTY_CLOB();
      v_len                    INTEGER;
      v_index                  INTEGER;

      PROCEDURE SEND_HEADER(header IN VARCHAR2, content IN VARCHAR2)
      AS
      BEGIN
        utl_smtp.write_data(vConnection, header || ': ' || content || vCRLF);
      END;

   begin

v_clob := pMessage;

 -- Abre conexão
      pStatus := 'OK';

      vConnection := utl_smtp.open_connection(vHost,25);

      -- efetua o Handshake.
      utl_smtp.helo(vConnection, vHost);

      -- Assinala remetente e destinatário
      utl_smtp.mail(vConnection, pSender);
      utl_smtp.rcpt(vConnection, pRecipient);

      -- Verifica "destinatário-cópia"
      if (vCcRecipient is not null) then
          utl_smtp.rcpt(vConnection, vCcRecipient);
      else
          vCcRecipient := '';
      end if;

      -- Cria mensagem
      utl_smtp.open_data(vConnection);
--      send_header('Date',          TO_CHAR(SYSDATE, 'fmDy, dd Mon yyyy fxhh24:mi:ss') );
      send_header('From', pSender);
      send_header('To', pRecipient);
      send_header('Subject', pSubject);
--      send_header('Cc',            vCcRecipient);
      send_header('MIME-Version', '1.0');
      send_header('Content-Type', 'text/html; charset=iso-8859-1');
      send_header('Content-Disposition', 'inline');
      send_header('Content-Transfer-Encoding', 'quoted-printable');


     UTL_SMTP.write_data(
        vConnection,
        'Content-Type:  multipart/alternative; boundary="' || c_mime_boundary || '"' || UTL_TCP.crlf
    );
    UTL_SMTP.write_data(vConnection, UTL_TCP.crlf);
    UTL_SMTP.write_data(
        vConnection,
        'This is a multi-part message in MIME format.' || UTL_TCP.crlf
    );

    UTL_SMTP.write_data(vConnection, '--' || c_mime_boundary || UTL_TCP.crlf);
    UTL_SMTP.write_data(vConnection, 'Content-Type: text/html; charset="UTF-8";' || UTL_TCP.crlf);

    -- Set up attachment header
    UTL_SMTP.write_data(
        vConnection,
           'Content-Disposition: attachment; filename="'
        || 'Arquivo.txt'
        || '"'
        || UTL_TCP.crlf
    );
    UTL_SMTP.write_data(vConnection, UTL_TCP.crlf);

    -- Write attachment contents

    v_len := DBMS_LOB.getlength(v_clob);
    v_index := 1;

    WHILE v_index <= v_len
    LOOP
        UTL_SMTP.write_data(vConnection, DBMS_LOB.SUBSTR(v_clob, 32000, v_index));
        v_index := v_index + 32000;
    END LOOP;

    --
    -- End attachment
    UTL_SMTP.write_data(vConnection, UTL_TCP.crlf);
    UTL_SMTP.write_data(vConnection, '--' || c_mime_boundary || '--' || UTL_TCP.crlf);

    UTL_SMTP.close_data(vConnection);
    UTL_SMTP.quit(vConnection);

EXCEPTION
    WHEN OTHERS
    THEN
        DBMS_OUTPUT.put_line(DBMS_UTILITY.format_error_stack);
   end PRD_SEND_MAIL;


   procedure PRD_SEND_MAIL(pMessage in CLOB)
   is
      vStatus varchar2(100);
   begin

      PRD_SEND_MAIL(
           vSender,
           vRecipient,
           vMailHost,
           vCcRecipient,
           vSubject,
           pMessage,
            vStatus
         );


   end PRD_SEND_MAIL;

   procedure SetSender(pSender in varchar2)
   is
   begin

      if pSender is not null
      then
         vSender := pSender;
      end if;

   end SetSender;

   function GetSender
      return varchar2
   is
   begin

      return vSender;

   end GetSender;

   procedure SetRecipient(pRecipient in varchar2)
   is
   begin

      if pRecipient is not null
      then
         vRecipient := pRecipient;
      end if;

   end SetRecipient;

   function GetRecipient
      return varchar2
   is
   begin

      return vRecipient;

   end GetRecipient;

   procedure SetCcRecipient(pCcRecipient in varchar2)
   is
   begin

      vCcRecipient := pCcRecipient;

   end SetCcRecipient;

   function GetCcRecipient
      return varchar2
   is
   begin

      return vCcRecipient;

   end GetCcRecipient;


   procedure SetMailHost(pMailHost in varchar2)
   is
   begin

      if pMailHost is not null
      then
         vMailHost := pMailHost;
      end if;

   end SetMailHost;


   function GetMailHost
      return varchar2
   is
   begin

      return vMailHost;

   end GetMailHost;

   procedure SetSubject(pSubject in varchar2)
   is
   begin

      vSubject := pSubject;

   end SetSubject;



   function GetSubject
      return varchar2
   is
   begin

      return vSubject;

   end GetSubject;


end PKG_MAIL_TESTE;


Esse é o código que eu estou usando.
maxwbh
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 21 Out 2014 5:16 pm
Localização: Belo Horizonte - MG
Maxwell da Silva Oliveira
(31) 9325.7479/ 9474.8854
maxwbh@gmail.com
http://lnkd.in/PkcQ5y

mih_cns ,
Não entendi direito o seu erro.
Vi que seu arquivo é do tipo txt por isto não iria esta mostrando HTML;
Outra coisa é que sua mensagem "Corpo do e-mail" é somente : 'This is a multi-part message in MIME format.'
Por tanto é somente esta parte que vai ser mostrada.
Qualquer coisa pode me chamar.



No meu código existem duas partes :
1ª é o corpo do e-mail

Selecionar tudo

                 /*Anexar o corpo da mensagem*/
                   utl_smtp.write_data(vconexao, [b]asc2html(BODY )[/b]);
                   utl_smtp.write_data(vconexao, utl_tcp.crlf || utl_tcp.crlf);

2ª é a anexação do arquivo:

Selecionar tudo

 /*Anexar arquivo na mensagem */
    IF p_attach_name IS NOT NULL
       AND p_attach_blob IS NOT NULL THEN
        utl_smtp.write_data(vconexao, '--' || l_boundary || utl_tcp.crlf);
        utl_smtp.write_data(vconexao, 'Content-Type: ' || p_attach_mime || '; name="' || p_attach_name || '"' ||utl_tcp.crlf);
        utl_smtp.write_data(vconexao, 'Content-Transfer-Encoding: base64' || utl_tcp.crlf);
        utl_smtp.write_data(vconexao, 'Content-Disposition: attachment; filename="' || p_attach_name || '"' || utl_tcp.crlf || utl_tcp.crlf);
mih_cns
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 25 Jun 2015 11:06 am

Então, eu estou aprendendo a mexer no ORACLE agora.
A minha dúvida é como tirar os caracteres do html do anexo. Eu quero que anexo fique formatado, mas que não mostre o html. Se não for incomodo, você poderia explicar a parte do seu código em que Converte ASC2 para HTML.
Quando roda a procedure, tem que preencher as variáveis manualmente?
Responder
  • Informação