Bom dia Amigos!
Alguém sabe como enviar um e-mail via banco, com um arquivo em anexo?
Obrigado!
Envio de e-mail via banco com anexo
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Seg, 28 Nov 2005 5:22 pm
- Localização: Ribeirão Preto/SP
-
- Rank: DBA Sênior
- Mensagens: 324
- Registrado em: Sex, 02 Jun 2006 1:48 pm
- Localização: sp
- Contato:
Criança, segue um exemplo...
Send mail with UTL_SMTP
Send mail without attachements using the UTL_SMTP package:
Send mail with UTL_SMTP - with attachments
Send mail with attachements using the UTL_SMTP package:
ALTER SESSION SET smtp_out_server = '127.0.0.1';
BEGIN
UTL_MAIL.send(sender => 'me@address.com',
recipients => 'you@address.com',
subject => 'Test Mail',
message => 'Hello World',
mime_type => 'text; charset=us-ascii');
END;
/
Send mail without attachements using the UTL_SMTP package:
DECLARE
v_From VARCHAR2(80) := 'oracle@mycompany.com';
v_Recipient VARCHAR2(80) := 'test@mycompany.com';
v_Subject VARCHAR2(80) := 'test subject';
v_Mail_Host VARCHAR2(30) := 'mail.mycompany.com';
v_Mail_Conn utl_smtp.Connection;
crlf VARCHAR2(2) := chr(13)||chr(10);
BEGIN
v_Mail_Conn := utl_smtp.Open_Connection(v_Mail_Host, 25);
utl_smtp.Helo(v_Mail_Conn, v_Mail_Host);
utl_smtp.Mail(v_Mail_Conn, v_From);
utl_smtp.Rcpt(v_Mail_Conn, v_Recipient);
utl_smtp.Data(v_Mail_Conn,
'Date: ' || to_char(sysdate, 'Dy, DD Mon YYYY hh24:mi:ss') || crlf ||
'From: ' || v_From || crlf ||
'Subject: '|| v_Subject || crlf ||
'To: ' || v_Recipient || crlf ||
crlf ||
'some message text'|| crlf || -- Message body
'more message text'|| crlf
);
utl_smtp.Quit(v_mail_conn);
EXCEPTION
WHEN utl_smtp.Transient_Error OR utl_smtp.Permanent_Error then
raise_application_error(-20000, 'Unable to send mail: '||sqlerrm);
END;
/
Send mail with attachements using the UTL_SMTP package:
DECLARE
v_From VARCHAR2(80) := 'oracle@mycompany.com';
v_Recipient VARCHAR2(80) := 'test@mycompany.com';
v_Subject VARCHAR2(80) := 'test subject';
v_Mail_Host VARCHAR2(30) := 'mail.mycompany.com';
v_Mail_Conn utl_smtp.Connection;
crlf VARCHAR2(2) := chr(13)||chr(10);
BEGIN
v_Mail_Conn := utl_smtp.Open_Connection(v_Mail_Host, 25);
utl_smtp.Helo(v_Mail_Conn, v_Mail_Host);
utl_smtp.Mail(v_Mail_Conn, v_From);
utl_smtp.Rcpt(v_Mail_Conn, v_Recipient);
utl_smtp.Data(v_Mail_Conn,
'Date: ' || to_char(sysdate, 'Dy, DD Mon YYYY hh24:mi:ss') || crlf ||
'From: ' || v_From || crlf ||
'Subject: '|| v_Subject || crlf ||
'To: ' || v_Recipient || crlf ||
'MIME-Version: 1.0'|| crlf || -- Use MIME mail standard
'Content-Type: multipart/mixed;'|| crlf ||
' boundary="-----SECBOUND"'|| crlf ||
crlf ||
'-------SECBOUND'|| crlf ||
'Content-Type: text/plain;'|| crlf ||
'Content-Transfer_Encoding: 7bit'|| crlf ||
crlf ||
'some message text'|| crlf || -- Message body
'more message text'|| crlf ||
crlf ||
'-------SECBOUND'|| crlf ||
'Content-Type: text/plain;'|| crlf ||
' name="excel.csv"'|| crlf ||
'Content-Transfer_Encoding: 8bit'|| crlf ||
'Content-Disposition: attachment;'|| crlf ||
' filename="excel.csv"'|| crlf ||
crlf ||
'CSV,file,attachement'|| crlf || -- Content of attachment
crlf ||
'-------SECBOUND--' -- End MIME mail
);
utl_smtp.Quit(v_mail_conn);
EXCEPTION
WHEN utl_smtp.Transient_Error OR utl_smtp.Permanent_Error then
raise_application_error(-20000, 'Unable to send mail: '||sqlerrm);
END;
/
-
- Rank: Analista Júnior
- Mensagens: 82
- Registrado em: Ter, 26 Fev 2008 11:33 am
- Localização: MG e SP
Leandro, beleza ????
Um exemplo:
De uma pesquisada na package UTL-MAIL, acho que tera mais informações sobre o que você procura.
Abraço
______________
Julian
Um exemplo:
CREATE OR REPLACE PROCEDURE send_email AS
BEGIN
UTL_MAIL.SEND(sender => 'xxx@oracle.com', recipients => 'xxx@oracle.com', cc => 'xxx@oracle.com', bcc => 'xxx@oracle.com', subject => 'Testmail', message => 'Hello');
EXCEPTION
WHEN OTHERS THEN
-- dbms_output.put_line('Fehler');
raise_application_error(-20001,'The following error has occured: ' || sqlerrm);
END;
Abraço
______________
Julian
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Seg, 28 Nov 2005 5:22 pm
- Localização: Ribeirão Preto/SP
Agradeço amigos pela dia, mas já utilizo utl_smtp para enviar só texto e com certeza é coisa de criança...
Mas o que estou fazendo é envio de "arquivo em anexo" no e-mail e consegui um bom exemplo em JSP (Java Stored Procedure)...
Mas o que estou fazendo é envio de "arquivo em anexo" no e-mail e consegui um bom exemplo em JSP (Java Stored Procedure)...
1 – Carregando e lendo a API JavaMail
Primeiramente, deve-se realizar o download a partir do site http://java.sun.com/products/javamail/index.html. Lá, encontram-se a API JAVAMAIL versão 1.3.2 e o JavaBeansTM Activation Framework extension ou JAF que é utilizado em conjunto com a API JAVAMAIL. Extraia o conteúdo dos arquivos *.ZIP para dentro da pasta C:\Temp, por exemplo, na qual você irá utilizar somente dois arquivos, o mail.jar e o activation.jar. No prompt do DOS digite :
loadjava -u sys/manager@o9i -o -r -v -f -noverify -synonym -g public mail.jar loadjava -u sys/manager@o9i -o -r -v -f -noverify -synonym -g public activation.jar
Onde :
-u sys/manager : Id e senha para sua conta SYS
-o : Para utilização do driver oci8
-r : Verificação e validação das classes JAVA
-v : Lista passo a passo do processo de carregamento das classes JAVA
-f : Recria o processo caso ocorra algum erro
-noverify : Verifica os bytecodes do processo -synonym : Cria sinônimos públicos -g public : Previlégios GRANT para as classes JAVA
Dentro do SQL PLUS digite :
Usuário SCOTT/TIGER
call sys.dbms_java.loadjava('-v -r -grant PUBLIC -synonym activation.jar') call sys.dbms_java.loadjava('-v -r -grant PUBLIC -synonym mail.jar')
Usuário SYS/MANAGER
exec dbms_java.grant_permission('SCOTT','java.util.PropertyPermission','*','read,write'); exec dbms_java.grant_permission('SCOTT','java.net.SocketPermission','*','connect, resolve');
exec dbms_java.grant_permission('SCOTT','java.io.FilePermission','C:\*','read,write');
2 – Criando a JSP (Java Stored Procedure)
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "SendMail" AS
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendMail {
// Sender, Recipient, CCRecipient, and BccRecipient are comma-separated
// lists of addresses. Body can span multiple CR/LF-separated lines.
// Attachments is a ///-separated list of file names.
public static int Send(String SMTPServer,
String Sender,
String Recipient,
String CcRecipient,
String BccRecipient,
String Subject,
String Body,
String ErrorMessage[],
String Attachments) {
// Error status;
int ErrorStatus = 0;
// Create some properties and get the default Session;
Properties props = System.getProperties();
//Inserção do endereço SMTP
props.put("smtp.são.terra.com.br", SMTPServer);
Session session = Session.getDefaultInstance(props, null);
try {
// Create a message.
MimeMessage msg = new MimeMessage(session);
// extracts the senders and adds them to the message.
// Sender is a comma-separated list of e-mail addresses as per RFC822.
{
InternetAddress[] TheAddresses = InternetAddress.parse(Sender);
msg.addFrom(TheAddresses);
}
// Extract the recipients and assign them to the message.
// Recipient is a comma-separated list of e-mail addresses as per RFC822.
{
InternetAddress[] TheAddresses = InternetAddress.parse(Recipient);
msg.addRecipients(Message.RecipientType.TO,TheAddresses);
}
// Extract the Cc-recipients and assign them to the message;
// CcRecipient is a comma-separated list of e-mail addresses as per RFC822
if (null != CcRecipient) {
InternetAddress[] TheAddresses = InternetAddress.parse(CcRecipient);
msg.addRecipients(Message.RecipientType.CC,TheAddresses);
}
// Extract the Bcc-recipients and assign them to the message;
// BccRecipient is a comma-separated list of e-mail addresses as per RFC822
if (null != BccRecipient) {
InternetAddress[] TheAddresses = InternetAddress.parse(BccRecipient);
msg.addRecipients(Message.RecipientType.BCC,TheAddresses); }
// Subject field
msg.setSubject(Subject);
// Create the Multipart to be added the parts to
Multipart mp = new MimeMultipart();
// Create and fill the first message part
{
MimeBodyPart mbp = new MimeBodyPart();
mbp.setText(Body);
// Attach the part to the multipart;
mp.addBodyPart(mbp);
}
// Attach the files to the message
if (null != Attachments) {
int StartIndex = 0, PosIndex = 0;
while (-1 != (PosIndex = Attachments.indexOf("///",StartIndex))) {
// Create and fill other message parts;
MimeBodyPart mbp = new MimeBodyPart();
FileDataSource fds =
new FileDataSource(Attachments.substring(StartIndex,PosIndex));
mbp.setDataHandler(new DataHandler(fds));
mbp.setFileName(fds.getName());
mp.addBodyPart(mbp);
PosIndex += 3;
StartIndex = PosIndex;
}
// Last, or only, attachment file;
if (StartIndex < Attachments.length()) {
MimeBodyPart mbp = new MimeBodyPart();
FileDataSource fds = new FileDataSource(Attachments.substring(StartIndex));
mbp.setDataHandler(new DataHandler(fds));
mbp.setFileName(fds.getName());
mp.addBodyPart(mbp);
}
}
// Add the Multipart to the message
msg.setContent(mp);
// Set the Date: header
msg.setSentDate(new Date());
// Send the message;
Transport.send(msg);
} catch (MessagingException MsgException) {
ErrorMessage[0] = MsgException.toString();
Exception TheException = null;
if ((TheException = MsgException.getNextException()) != null)
ErrorMessage[0] = ErrorMessage[0] + "\n" + TheException.toString();
ErrorStatus = 1;
}
return ErrorStatus;
} // End Send Class
} // End of public class SendMail
/
3 – Criando o cabeçalho da Package PL/SQL
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
FUNCTION 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)
RETURN NUMBER;
END SendMailJPkg;
/
3.2 – Criando o corpo da Package PL/SQL
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, skip first element since it has been
-- already processed;
-- accommodate for sparse collections;
FOR I IN Attachments.NEXT(Attachments.FIRST) ..
Attachments.LAST LOOP
AttachmentList := AttachmentList || AttachmentSeparator
|| Attachments(I);
END LOOP;
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
FUNCTION 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) RETURN NUMBERIS
AttachmentList VARCHAR2(4000) := '';
AttachmentTypeList VARCHAR2(2000) := '';
BEGIN
ParseAttachment(Attachments,AttachmentList);
RETURN JSendMail(SMTPServerName,
Sender,
Recipient,
CcRecipient,
BccRecipient,
Subject,
Body,
ErrorMessage,
AttachmentList);
END SendMail;
-- JSendMail's body is the java function SendMail.Send()
-- thus, no PL/SQL implementation is needed
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 IS
LANGUAGE JAVA
NAME 'SendMail.Send(java.lang.String,
java.lang.String,
java.lang.String,
java.lang.String,
java.lang.String,
java.lang.String,
java.lang.String,
java.lang.String[],
java.lang.String) return int';
END SendMailJPkg;
/
4 – Checando o funcionamento do E-mail (SQL PLUS)
var ErrorMessage VARCHAR2(4000);
var ErrorStatus NUMBER;
-- Aciona a saída no SQL*PLUS
SET SERVEROUTPUT ON
-- Redireciona a saída java dentro do buffer SQL*PLUS
exec dbms_java.set_output(5000);
BEGIN
:ErrorStatus := SendMailJPkg.SendMail(
SMTPServerName => 'localhost',
Sender => 'leandro@terra.com.br',
Recipient => 'leandroeschiavi@terra.com.br',
CcRecipient => '',
BccRecipient => '',
Subject => 'This is the subject line:
Test JavaMail',
Body => 'This is the body: Hello, this is a test' ||
SendMailJPkg.EOL || 'that spans 2 lines',
ErrorMessage => :ErrorMessage,
Attachments => SendMailJPkg.ATTACHMENTS_LIST(
'C:\ppc0010r.pdf' ,'C:\teste.txt'
)
);
END;
/print
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Seg, 28 Nov 2005 5:22 pm
- Localização: Ribeirão Preto/SP
Amigo,
Teste o bloco que você passou, com arquivos TXT ele funciona bem, mas com PDF não fica legal...
Obrigado
Teste o bloco que você passou, com arquivos TXT ele funciona bem, mas com PDF não fica legal...
Obrigado
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Seg, 28 Nov 2005 5:22 pm
- Localização: Ribeirão Preto/SP
No caso Anderson, estou primeiro salvando os arquivos no diretório de banco criado...
Mas parece que ele que cria o arquivo em anexo, e não busca no diretório...
Obrigado
Mas parece que ele que cria o arquivo em anexo, e não busca no diretório...
Obrigado
-
- Rank: Estagiário Júnior
- Mensagens: 2
- Registrado em: Qua, 26 Nov 2008 10:01 am
- Localização: Bragança Paulista - SP
Vitor.
Leandro, estava com esse mesmo problema e encontrei uma Java Stored Procedure que resolveu meu problema. Como o arquivo está gerado no disco do SO, eu fiz um procedimento para carregar esse arquivo para um BLOB e depois chamei esse java, estou te mandando esses dois códigos.
Para mim funcionou perfeitamento, qualquer coisa, estamos ai.
-- CÓDIGO JAVA QUE ENVIA O EMAIL COM ANEXO.
create or replace and compile java source named mail as
import java.io.*;
import java.sql.*;
import java.util.Properties;
import java.util.Date;
import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;
import oracle.jdbc.driver.*;
import oracle.sql.*;
public class mail {
static String dftMime = "application/octet-stream";
static String dftName = "filename.dat";
public static oracle.sql.NUMBER send(String from,
String to,
String cc,
String bcc,
String subject,
String body,
String SMTPHost,
oracle.sql.BLOB attachmentData,
String attachmentType,
String attachmentFileName) {
int rc = 0;
try {
Properties props = System.getProperties();
props.put("mail.smtp.host", SMTPHost);
Message msg = new MimeMessage(Session.getDefaultInstance(props, null));
msg.setFrom(new InternetAddress(from));
if (to != null && to.length() > 0)
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
if (cc != null && cc.length() > 0)
msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc, false));
if (bcc != null && bcc.length() > 0)
msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bcc, false));
if ( subject != null && subject.length() > 0 )
msg.setSubject(subject);
else
msg.setSubject("(no subject)");
msg.setSentDate(new Date());
if (attachmentData != null) {
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText((body != null ? body : ""));
mbp1.setDisposition(Part.INLINE);
MimeBodyPart mbp2 = new MimeBodyPart();
String type = (attachmentType != null ? attachmentType : dftMime);
String fileName = (attachmentFileName != null ? attachmentFileName : dftName);
mbp2.setDisposition(Part.ATTACHMENT);
mbp2.setFileName(fileName);
mbp2.setDataHandler(new DataHandler(new BLOBDataSource(attachmentData, type)));
MimeMultipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
msg.setContent(mp);
} else {
msg.setText((body != null ? body : ""));
}
Transport.send(msg);
rc = 1;
} catch (Exception e) {
e.printStackTrace();
rc = 0;
} finally {
return new oracle.sql.NUMBER(rc);
}
}
static class BLOBDataSource implements DataSource {
private BLOB data;
private String type;
BLOBDataSource(BLOB data, String type) {
this.type = type;
this.data = data;
}
public InputStream getInputStream() throws IOException {
try {
if(data == null)
throw new IOException("No data.");
return data.getBinaryStream();
} catch(SQLException e) {
throw new IOException("Cannot get binary input stream from BLOB.");
}
}
public OutputStream getOutputStream() throws IOException {
throw new IOException("Cannot do this.");
}
public String getContentType() {
return type;
}
public String getName() {
return "BLOBDataSource";
}
}
}
-- FUNÇÃO QUE CHAMA O CÓDIGO JAVA.
create or replace function send (p_from in varchar2,
p_to in varchar2,
p_cc in varchar2,
p_bcc in varchar2,
p_subject in varchar2,
p_body in varchar2,
p_smtp_host in varchar2,
p_attachment_data in blob,
p_attachment_type in varchar2,
p_attachment_file_name in varchar2) return number is
language java name 'mail.send( java.lang.String,
java.lang.String,
java.lang.String,
java.lang.String,
java.lang.String,
java.lang.String,
java.lang.String,
oracle.sql.BLOB,
java.lang.String,
java.lang.String
) return oracle.sql.NUMBER';
-- FUNÇÃO QUE CARREGA O ARQUIVO DO DISCO PARA UM BLOB E
-- CHAMA A PROCEDURE JAVA.
FUNCTION FU_ENVIAR_EMAIL(P_TO IN VARCHAR2,
P_ASSUNTO IN VARCHAR2,
P_TEXTO IN VARCHAR2,
P_PEDIDO IN NUMBER,
P_MSG OUT VARCHAR2,
P_CC IN VARCHAR2,
P_BCC IN VARCHAR2) RETURN BOOLEAN IS
V_BFILE BFILE := NULL;
V_BLOB BLOB;
SRC_OFFSET NUMBER := 1;
DST_OFFSET NUMBER := 1;
RET_CODE NUMBER;
V_RET VARCHAR2(2000);
V_URL VARCHAR2(2000) := NULL;
V_DIR VARCHAR2(1000);
--
BEGIN
-- Carrega o arquivo gerado pela URL em uma variável do tipo BLOB.
V_BFILE := BFILENAME('LOCATION_ARQUIVO_UNIX', P_PEDIDO || '.pdf');
DBMS_LOB.FILEOPEN(V_BFILE, DBMS_LOB.FILE_READONLY);
DBMS_LOB.CREATETEMPORARY(V_BLOB, TRUE);
DBMS_LOB.LOADBLOBFROMFILE(V_BLOB, V_BFILE, DBMS_LOB.LOBMAXSIZE, DST_OFFSET, SRC_OFFSET);
DBMS_LOB.FILECLOSE(V_BFILE);
--
-- Chama a função responsável por enviar o e-mail.
RET_CODE := SEND(P_FROM => 'teste@teste.com.br',
P_TO => P_TO,
P_CC => P_CC,
P_BCC => P_BCC,
P_SUBJECT => P_ASSUNTO,
P_BODY => P_TEXTO || CHR(13) || CHR(13),
P_SMTP_HOST => smtp_host,
P_ATTACHMENT_DATA => V_BLOB,
P_ATTACHMENT_TYPE => 'text/plain', --'application/winzip',
P_ATTACHMENT_FILE_NAME => 'pedido_' || V_COD_PEDIDO || '.pdf');
--
-- Valida o retorno da função.
IF RET_CODE = 1 THEN
RETURN TRUE;
ELSE
P_MSG := 'Erro desconhecido ao enviar e-mail.';
RETURN FALSE;
END IF;
--
EXCEPTION
WHEN OTHERS THEN
P_MSG := 'Erro ao enviar e-mail. Erro: ' || SQLERRM;
RETURN FALSE;
END;
-
- Rank: Programador Júnior
- Mensagens: 19
- Registrado em: Qua, 01 Jul 2009 10:35 am
- Localização: Belo Horizonte / MG
Anderson, no seu código (abaixo) você, menciona o arquivo "excel.csv", fiz o teste e seu procedimento funcionou, entretanto o anexo foi gerado apenas com as seguintes informações "CSV,file,attachement", com esse procedimento eu realmente consigo anexar um arquivo no disco do SO ?
Se sim, como devo proceder para idêntificar a localização do arquivo, tentei colocar o path absoluto = "C:\excel.csv" e não deu certo..
At. Ernandes Muniz
Se sim, como devo proceder para idêntificar a localização do arquivo, tentei colocar o path absoluto = "C:\excel.csv" e não deu certo..
At. Ernandes Muniz
'-------SECBOUND'|| crlf ||
'Content-Type: text/plain;'|| crlf ||
' name="excel.csv"'|| crlf ||
'Content-Transfer_Encoding: 8bit'|| crlf ||
'Content-Disposition: attachment;'|| crlf ||
' filename="excel.csv"'|| crlf ||
crlf ||
'CSV,file,attachement'|| crlf || -- Content of attachment
crlf
-
- Rank: DBA Pleno
- Mensagens: 248
- Registrado em: Sex, 06 Fev 2009 3:02 pm
- Localização: ERECHIM - RS
Galera,
como faço para chamar a funçao FU_ENVIAR_EMAIL
podem me dar um exemplo da chamada com os parametros. Tentei fazer aqui mas da erro dizendo "expressao é do tipo incorreto"
obrigado,
Marlon
como faço para chamar a funçao FU_ENVIAR_EMAIL
podem me dar um exemplo da chamada com os parametros. Tentei fazer aqui mas da erro dizendo "expressao é do tipo incorreto"
obrigado,
Marlon
-
- Rank: DBA Pleno
- Mensagens: 248
- Registrado em: Sex, 06 Fev 2009 3:02 pm
- Localização: ERECHIM - RS
Mais uma pergunta por favor.
O que é que vai nesta variavel
pois quando vou criar a function diz que variavel não definida
O que é que vai nesta variavel
P_SMTP_HOST => smtp_host,
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante