[oracle_br] Re: Enviar e-mail pelo Oracle com Conteúdo HTML

2007-02-22 Por tôpico jlchiappa
Em PL/SQL o tamanho máximo de uma string é 32767, ponto, não tem como 
vc aumentar. O que vc deverá fazer é RE-ESCREVER a rotina de modo a 
trabalhar com pedaços de informação, e já que vc NÃO sabe nada de 
java E tem bd 10g (aonde NÃO é mais necessário vc usar java pra 
enviar e-mail, a package UTL_MAIL substituiu isso) eu diria pra vc 
seguir a nota Subject:  How To Send Attachments Of Size Greater Than 
32 KB Using UTL_SMTP Package ,  Doc ID:  Note:357385.1 no metalink.

[]s

 Chiappa

--- Em oracle_br@yahoogrupos.com.br, Augusto Cesar R. Costa 
[EMAIL PROTECTED] escreveu

 Pessoal, bom dia.
 Estou precisando de uma ajuda, se alguém já tiver algo pronto ou 
souber como fazer agradeço.
 Tenho uma rotina que envia e-mail com conteúdo em html através do 
Oracle, utilizando Java Stored Procedure.
 O problema é que o body do e-mail é montado utilizando uma variável 
varchar2 de tamanho 32767, e, estou precisando aumentar o tamanho do 
body deste e-mail. Pensei em utilizar campo CLOB para a montagem do 
body do e-mail, mas não consegui fazer isso pois a varíavel que a 
Java Stored Procedure recebe como parâmetro é do tipo string.
 Não consigo alterar o fonte da Java Stored Procedure por não 
conhecer nada de Java.
 De antemão aviso que não é possível dividir o e-mail em vários.
 As informações em relação a versão do Oracle e do SO estão a seguir:
 
 BANNER
 
 Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
 PL/SQL Release 10.2.0.3.0 - Production
 CORE 10.2.0.3.0 Production
 
 TNS for Linux: Version 10.2.0.3.0 - Production
 NLSRTL Version 10.2.0.3.0 - Production
 
 O Linux utilizado é o Red Hat EL 4.
 
 Segue abaixo os fontes da rotina de envio de e-mail, infelizmente 
não tenho os créditos de quem fez.
 
 Atenciosamente.
 Augusto Cesar Rodovalho Costa
 
 
 
---
 PACKAGE em PL/SQL que executa a Java Stored Procedure
 
---
 
 CREATE OR REPLACE PACKAGE SendMailJPkg AS
 -- EOL is used to separate text line in the message body;
 EOL CONSTANT STRING(2) := CHR(13) || CHR(10);
 TYPE ATTACHMENTS_LIST IS   TABLE OF VARCHAR2(4000);
 -- high-level interface with collections;
 PROCEDURE SendMail(SMTPServerName IN STRING
  ,Sender IN STRING
  ,Recipient IN STRING
  ,CcRecipient IN STRING  DEFAULT ''
  ,BccRecipient IN STRING DEFAULT ''
  ,Subject IN STRING  DEFAULT ''
  ,Body IN STRING DEFAULT ''
  ,ErrorMessage OUT STRING,
  Attachments IN ATTACHMENTS_LISTDEFAULT NULL);
 
 PROCEDURE SendMailHTML(SMTPServerName IN STRING
   ,Sender IN STRING
   ,Recipient IN STRING
   ,CcRecipient IN STRING
   ,BccRecipient IN STRING
   ,Subject IN STRING
   ,Body IN STRING
   ,ErrorMessage OUT STRING);
 END SendMailJPkg;
 
 CREATE OR REPLACE PACKAGE BODY SendMailJPkg AS
 
 PROCEDURE ParseAttachment(Attachments IN ATTACHMENTS_LIST
  ,AttachmentList OUT VARCHAR2)
 IS
AttachmentSeparator CONSTANT VARCHAR2(12) := '///';
 
 BEGIN
-- boolean short-circuit is used here;
IF Attachments IS NOT NULL AND Attachments.COUNT  0 THEN
 
   AttachmentList := Attachments(Attachments.FIRST);
   -- scan the collection if there is more than one element. If 
there
   -- is not, skip the next part for parsing elements 2 and 
above. If there
   -- is, skip the first element since it has been already 
processed
   IF Attachments.COUNT  1 THEN
  FOR I IN Attachments.NEXT(Attachments.FIRST).. 
Attachments.LAST LOOP
  AttachmentList := AttachmentList || 
AttachmentSeparator || Attachments(I);
  END LOOP;
   ELSE
  -- whe have to terminate the list with the one element 
with  /// for the java function
  AttachmentList := AttachmentList  || AttachmentSeparator;
   END IF;
 
ELSE
AttachmentList  := '';
END IF;
 
 END ParseAttachment;
 
 -- forward declaration;
 FUNCTION JSendMail(SMTPServerName IN STRING
   ,Sender IN STRING
   ,Recipient IN STRING
   ,CcRecipient IN STRING
   ,BccRecipient IN STRING
   ,Subject IN STRING
   ,Body IN STRING
   ,ErrorMessage OUT STRING
   ,Attachments IN STRING)
 RETURN NUMBER;
 
 -- high-level interface with collections;
 PROCEDURE SendMail(SMTPServerName IN STRING
  ,Sender IN STRING
  ,Recipient IN STRING
  ,CcRecipient IN STRING
  

Re: [oracle_br] Re: Enviar e-mail pelo Oracle com Conteúdo HTML

2007-02-22 Por tôpico Augusto Cesar R. Costa
Chiappa, obrigado pela indicação.
Teria me enviar esta nota? O acesso ao metalink que temos está temporariamente 
suspenso.
Atenciosamente.


  - Original Message - 
  From: jlchiappa 
  To: oracle_br@yahoogrupos.com.br 
  Sent: Thursday, February 22, 2007 11:34 AM
  Subject: [oracle_br] Re: Enviar e-mail pelo Oracle com Conteúdo HTML


  Em PL/SQL o tamanho máximo de uma string é 32767, ponto, não tem como 
  vc aumentar. O que vc deverá fazer é RE-ESCREVER a rotina de modo a 
  trabalhar com pedaços de informação, e já que vc NÃO sabe nada de 
  java E tem bd 10g (aonde NÃO é mais necessário vc usar java pra 
  enviar e-mail, a package UTL_MAIL substituiu isso) eu diria pra vc 
  seguir a nota Subject: How To Send Attachments Of Size Greater Than 
  32 KB Using UTL_SMTP Package , Doc ID: Note:357385.1 no metalink.

  []s

  Chiappa

  --- Em oracle_br@yahoogrupos.com.br, Augusto Cesar R. Costa 
  [EMAIL PROTECTED] escreveu
  
   Pessoal, bom dia.
   Estou precisando de uma ajuda, se alguém já tiver algo pronto ou 
  souber como fazer agradeço.
   Tenho uma rotina que envia e-mail com conteúdo em html através do 
  Oracle, utilizando Java Stored Procedure.
   O problema é que o body do e-mail é montado utilizando uma variável 
  varchar2 de tamanho 32767, e, estou precisando aumentar o tamanho do 
  body deste e-mail. Pensei em utilizar campo CLOB para a montagem do 
  body do e-mail, mas não consegui fazer isso pois a varíavel que a 
  Java Stored Procedure recebe como parâmetro é do tipo string.
   Não consigo alterar o fonte da Java Stored Procedure por não 
  conhecer nada de Java.
   De antemão aviso que não é possível dividir o e-mail em vários.
   As informações em relação a versão do Oracle e do SO estão a seguir:
   
   BANNER
   --
   Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
   PL/SQL Release 10.2.0.3.0 - Production
   CORE 10.2.0.3.0 Production
   
   TNS for Linux: Version 10.2.0.3.0 - Production
   NLSRTL Version 10.2.0.3.0 - Production
   
   O Linux utilizado é o Red Hat EL 4.
   
   Segue abaixo os fontes da rotina de envio de e-mail, infelizmente 
  não tenho os créditos de quem fez.
   
   Atenciosamente.
   Augusto Cesar Rodovalho Costa
   
   
   --
  ---
   PACKAGE em PL/SQL que executa a Java Stored Procedure
   --
  ---
   
   CREATE OR REPLACE PACKAGE SendMailJPkg AS
   -- EOL is used to separate text line in the message body;
   EOL CONSTANT STRING(2) := CHR(13) || CHR(10);
   TYPE ATTACHMENTS_LIST IS TABLE OF VARCHAR2(4000);
   -- high-level interface with collections;
   PROCEDURE SendMail(SMTPServerName IN STRING
   ,Sender IN STRING
   ,Recipient IN STRING
   ,CcRecipient IN STRING DEFAULT ''
   ,BccRecipient IN STRING DEFAULT ''
   ,Subject IN STRING DEFAULT ''
   ,Body IN STRING DEFAULT ''
   ,ErrorMessage OUT STRING,
   Attachments IN ATTACHMENTS_LIST DEFAULT NULL);
   
   PROCEDURE SendMailHTML(SMTPServerName IN STRING
   ,Sender IN STRING
   ,Recipient IN STRING
   ,CcRecipient IN STRING
   ,BccRecipient IN STRING
   ,Subject IN STRING
   ,Body IN STRING
   ,ErrorMessage OUT STRING);
   END SendMailJPkg;
   
   CREATE OR REPLACE PACKAGE BODY SendMailJPkg AS
   
   PROCEDURE ParseAttachment(Attachments IN ATTACHMENTS_LIST
   ,AttachmentList OUT VARCHAR2)
   IS
   AttachmentSeparator CONSTANT VARCHAR2(12) := '///';
   
   BEGIN
   -- boolean short-circuit is used here;
   IF Attachments IS NOT NULL AND Attachments.COUNT  0 THEN
   
   AttachmentList := Attachments(Attachments.FIRST);
   -- scan the collection if there is more than one element. If 
  there
   -- is not, skip the next part for parsing elements 2 and 
  above. If there
   -- is, skip the first element since it has been already 
  processed
   IF Attachments.COUNT  1 THEN
   FOR I IN Attachments.NEXT(Attachments.FIRST).. 
  Attachments.LAST LOOP
   AttachmentList := AttachmentList || 
  AttachmentSeparator || Attachments(I);
   END LOOP;
   ELSE
   -- whe have to terminate the list with the one element 
  with /// for the java function
   AttachmentList := AttachmentList || AttachmentSeparator;
   END IF;
   
   ELSE
   AttachmentList := '';
   END IF;
   
   END ParseAttachment;
   
   -- forward declaration;
   FUNCTION JSendMail(SMTPServerName IN STRING
   ,Sender IN STRING
   ,Recipient IN STRING
   ,CcRecipient IN STRING
   ,BccRecipient IN STRING
   ,Subject IN STRING
   ,Body IN STRING
   ,ErrorMessage OUT STRING
   ,Attachments IN STRING)
   RETURN NUMBER;
   
   -- high-level interface with collections;
   PROCEDURE SendMail(SMTPServerName IN STRING
   ,Sender IN STRING
   ,Recipient IN STRING
   ,CcRecipient IN STRING
   ,BccRecipient IN STRING
   ,Subject IN STRING
   ,Body IN STRING
   ,ErrorMessage OUT STRING
   ,Attachments IN ATTACHMENTS_LIST