RE:Mail desde Developer 2000
MIRA LO PRIMERO QUE TE SUGIERO ES QUE GENERES UN UN ARCHIVO PLANO(TEXTO) Y LUEGO DEBES DE HACER UNA FORMA PARA CAPTURAR LA DIRECCION DEL REMITENTE , LA DEL DESTINATARIO, EL MENSAJE Y EL LUGAR DONDE SE ENCUENTRA TU ARCHIVO . LUEGO COLOCA UN BOTON EN EL CUAL DEBES DE LLAMARAS AL PROCESO QUE ENVIARA EL MAIL(PR_PROCESA;).
LUEGO COPIA ESTOS TRES PROCESOS DENTRO DE FORMS Y AJUSTALOS A TU NECESIDAD.
ESTOS PROCESOS LEEN EL ARCHVIO Y A LA VEZ LO ENVIA, LOS DETALLO MAS ABAJO.
NOTA
(ESTOS PROCESOS LOS ENCONTRE DENTRO DE UNA FORMA LA CUAL ESTA EN INTERNET PERO NO DEJO LA DIRECCION PORQUE NO LA RECUERDO )
**************************************************************************************
PROCEDURE PR_PROCESA IS
BEGIN
:archivo1:='c:\'||TO_CHAR(SYSDATE,'HH24')||TO_CHAR(SYSDATE,'MI')||TO_CHAR(SYSDATE,'SS')||'.txt';
PR_GENERA_PLANO;
PR_ENVIA_CORREO;
Host('C:/Limpia_archivo.BAT.bat', NO_SCREEN );
:archivo1:='';
END;
**************************************************************************************
PROCEDURE PR_GENERA_PLANO IS
detalle TEXT_IO.FILE_TYPE;
linead VARCHAR2(3000);
v_cod_prod NUMBER(6);
v_desc_prod VARCHAR2(30);
v_genera_encabezado VARCHAR2(2):='SI';
conteo NUMBER:=0;
CURSOR productos IS SELECT PRODID,DESCRIP FROM PRODUCT;
BEGIN
detalle := TEXT_IO.FOPEN(:archivo1, 'w');
-- **********************************************************************
-- ARCHIVO PLANO SEPARADO POR TABULADORES
-- **********************************************************************
:nro_reg:='...generando archivo...';
synchronize;
OPEN productos;
LOOP
FETCH productos INTO v_cod_prod,v_desc_prod;
EXIT WHEN productos%NOTFOUND;
IF v_genera_encabezado='SI' THEN
linead:='"codigo"'||CHR(09)||'"descripcion"';
v_genera_encabezado:='NO'; -- Indica si genera encabezado.
ELSE
conteo:=conteo+1;
linead:='"'||v_cod_prod||'"'||
CHR(09)||'"'||
v_desc_prod||'"'||
CHR(09);
END IF;
TEXT_IO.PUT_LINE(detalle,linead);
:nro_reg:=conteo;
synchronize;
END LOOP;
CLOSE productos;
:DATOS.ULTIMO_ENVIO:=SYSDATE;
TEXT_IO.FCLOSE(detalle);
END;
**************************************************************************************
PROCEDURE pr_envia_correo IS
--
-- Como enviar correos electrónicos con multiples archivos atachados usando Outlook ?
/*Declaración de Variables Objeto Outlook*/
application ole2.OBJ_TYPE;
hMailItem ole2.OBJ_TYPE;
hRecipients ole2.OBJ_TYPE;
recipient ole2.OBJ_TYPE;
/*Declaración de la Lista de Argumentos*/
args OLE2.LIST_TYPE;
msg_attch OLE2.OBJ_TYPE;
attachment OLE2.OBJ_TYPE;
des VARCHAR2(80) := 'FILE_NAME';
attch VARCHAR2(80) := :DATOS.ARCHIVO1;
BEGIN
/*Creación del Application Instance*/
application := ole2.create_obj('Outlook.Application');
args := ole2.create_arglist;
ole2.add_arg(args,0);
hMailItem := ole2.invoke_obj(application,'CreateItem',args);
ole2.destroy_arglist(args);
msg_attch := OLE2.GET_OBJ_PROPERTY(hMailItem,'Attachments');
/* Atachar el primer archivo */
args := OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG(args,attch);
attachment := OLE2.INVOKE_OBJ(msg_attch,'Add',args);
ole2.destroy_arglist(args);
OLE2.SET_PROPERTY(attachment,'name',des);
OLE2.SET_PROPERTY(attachment,'position',1);
OLE2.SET_PROPERTY(attachment,'type',1);
OLE2.SET_PROPERTY(attachment,'source',Attch);
args := OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG(args,Attch);
OLE2.INVOKE(attachment,'ReadFromFile',args);
OLE2.DESTROY_ARGLIST(args);
/*Captura la propiedad Recipients del objeto hMailItem: Retorna una colección de recipiente que representa todos los recipientes para el Item Outlook*/
args := ole2.create_arglist;
hRecipients := ole2.get_obj_property(hMailItem,'Recipients',args);
ole2.destroy_arglist(args);
/*PARA LA PRIMERA DIRECCION ELECTRONICA*/
/*Usa el método Add para crear una instancia de los recipientes y adiciona en este la colección de recipientes*/
args:=ole2.create_arglist;
ole2.add_arg(args,:DATOS.DESTINO_ENVIO_PPAL); -- Dirección Electrónica
recipient := ole2.invoke_obj(hRecipients,'Add',args);
/*Adiciona a la propiedad TYPE de la instancia del recipiente el valor que se necesita (0=Originator,1=To,2=CC,3=BCC)*/
ole2.set_property(recipient,'Type',1);
ole2.destroy_arglist(args);
/*PARA LA SEGUNDA DIRECCION ELECTRONICA*/
IF :DATOS.DESTINO_ENVIO_COPIA IS NOT NULL THEN -- Solo lo hace si tiene Dirección Electrónica a Donde Enviar
/*Usa el método Add para crear una instancia de los recipientes y adiciona en este la colección de recipientes*/
args:=ole2.create_arglist;
ole2.add_arg(args,:DATOS.DESTINO_ENVIO_COPIA); -- Dirección Electrónica
recipient := ole2.invoke_obj(hRecipients,'Add',args);
/*Adiciona a la propiedad TYPE de la instancia del recipiente el valor que se necesita (0=Originator,1=To,2=CC,3=BCC)*/
ole2.set_property(recipient,'Type',2);
ole2.destroy_arglist(args);
END IF;
/*Resolución de la colección de recipientes*/
args := ole2.create_arglist;
ole2.invoke(hRecipients,'ResolveAll',args);
/*Asigna las propiedades Subject y Body*/
ole2.set_property(hMailItem,'Subject','Prueba de mensaje FORMS6i - CURSORES - PLANO - TIMER');
ole2.set_property(hMailItem,'Body',:DATOS.MENSAJE);
/*Graba el correo electrónico*/
ole2.invoke(hMailItem,'Save',args);
ole2.destroy_arglist(args);
/*Envia el correo electrónico*/
args := ole2.create_arglist;
ole2.invoke(hMailItem,'Send',args);
ole2.destroy_arglist(args);
/*Libera todas las instancias usadas*/
release_obj(application);
release_obj(hRecipients);
release_obj(recipient);
release_obj(hMailItem);
END;