Forms 6: Enviar correo con adjunto a través de Outlook

Con este código nos permite añadir un mensaje en la bandeja de salida y luego enviarlo o mostrar el mensaje para ser enviado luego por el usuario.

DECLARE
v_outlookapp ole2.obj_type;
v_namespace ole2.obj_type;
v_mailitem ole2.obj_type;
v_oleparam ole2.list_type;
v_attachments ole2.obj_type;
BEGIN
v_outlookapp := ole2.create_obj(‘Outlook.Application’);
v_oleparam := ole2.create_arglist;
ole2.add_arg(v_oleparam, ‘MAPI’);
v_namespace := ole2.invoke_obj(v_outlookapp, ‘GetNameSpace’, v_oleparam);
ole2.destroy_arglist(v_oleparam);
v_oleparam := ole2.create_arglist;
ole2.add_arg(v_oleparam, 0);
v_mailitem := ole2.invoke_obj(v_outlookapp, ‘CreateItem’, v_oleparam);
ole2.destroy_arglist(v_oleparam);
ole2.set_property(v_mailitem, ‘To’, ‘xxxx@xxxmail.com’);
ole2.set_property(v_mailitem, ‘Subject’, ‘Asunto’);
ole2.set_property(v_mailitem, ‘Body’, ‘Texto del mensaje’);

— Añadimos el adjunto
v_attachments := ole2.get_obj_property(v_mailitem, ‘Attachments’);
v_oleparam := ole2.create_arglist;
ole2.add_arg(v_oleparam, ‘C:\Temp\prueba.pdf’);
ole2.invoke(v_attachments, ‘add’, v_oleparam);
ole2.destroy_arglist(v_oleparam);

— Con esta línea invocamos el envío, si queremos
— simplemente abrir el Outlook para que pueda revisar
— el correo cambiamos ‘Send’ por ‘Display’

ole2.invoke(v_mailitem, ‘Send’);

ole2.RELEASE_OBJ(v_mailitem);
ole2.RELEASE_OBJ(v_namespace);
ole2.RELEASE_OBJ(v_outlookapp);
END;

Sin adjunto sería parecido pero con menos código, ahí va el ejemplo:

DECLARE
v_outlookapp ole2.obj_type;
v_namespace ole2.obj_type;
v_mailitem ole2.obj_type;
v_oleparam ole2.list_type;
BEGIN
v_outlookapp := ole2.create_obj(‘Outlook.Application’);
v_oleparam := ole2.create_arglist;
ole2.add_arg(v_oleparam, ‘MAPI’);
v_namespace := ole2.invoke_obj(v_outlookapp, ‘GetNameSpace’, v_oleparam);
ole2.destroy_arglist(v_oleparam);
v_oleparam := ole2.create_arglist;
ole2.add_arg(v_oleparam, 0);
v_mailitem := ole2.invoke_obj(v_outlookapp, ‘CreateItem’, v_oleparam);
ole2.destroy_arglist(v_oleparam);
ole2.set_property(v_mailitem, ‘To’, ‘xxxx@xxxmail.com‘);
ole2.set_property(v_mailitem, ‘Subject’, ‘Asunto’);
ole2.set_property(v_mailitem, ‘Body’, ‘Texto del mensaje sin adjunto’);

— Con esta línea invocamos el envío, si queremos
— simplemente abrir el Outlook para que pueda revisar
— el correo cambiamos ‘Send’ por ‘Display’

ole2.invoke(v_mailitem, ‘Send’);

ole2.RELEASE_OBJ(v_mailitem);
ole2.RELEASE_OBJ(v_namespace);
ole2.RELEASE_OBJ(v_outlookapp);
END;