Para que Libra pueda gestionar el envío y recepción de correos electrónicos es necesario configurar la base de datos para que el paquete JMAIL se ejecute de forma correcta.
IMPORTANTE: Este procedimiento no es válido para versiones Oracle 11.2.0.4.0 o posteriores (incluida cualquier versión de Oracle 12c).
Primero hay que asignar permisos de Java al usuario de base de datos en que reside Libra, para ello pasaremos la sql permisos_java.sql. Hay que usar el sqlplus de Oracle 10g o superior, es decir, no usar el sqlplus que viene con Oracle Forms 6. Esta sql pide los siguientes parámetros: [Descarga no encontrada]
- usuario_sys: SYS
- password_sys: especificar la contraseña del usuario SYS de la base de datos.
- Cadena_conexion: Cadena de conexión para conectar con la base de datos, por ejemplo si para conectar como libra ponemos LIBRA/PASSWORD@EDISA, pondríamos EDISA.
- usuario_bd_libra: Usuario de base de datos de libra, normalmente será LIBRA
Si después de indicar la cadena de conexión al pasar el permisos_java.sql da el error ORA-01031 es que se está usando un sqlplus de Oracle 8 (por ejemplo el que trae forms), hay que usar el de Oracle 10g o superior.
Introduzca un valor para usuario_sys: SYS
Introduzca un valor para password_sys: PASSWORDESYS
Introduzca un valor para cadena_conexion: EDISA
ERROR:
ORA-01031: privilegios insuficientes
En caso de estar usando Oracle 11g hay que cargar las librerías mail.jar y activation.jar. En caso de no cargarlas al intentar usar JMAIL nos dará el error: javax.mail.NoSuchProviderException: No provider for Address type: rfc822
Para cargar las librerías hay que copiarlas en una carpeta del servidor de base de datos y por línea de comandos (una vez nos situamos en el directorio en donde se encuentran los archivos) se ejecuta los siguiente (reemplazar <PASSWORD> y <CADENA_CONEXION> por los valores correspondientes):
loadjava -u SYS/<PASSWORD>@<CADENA_CONEXION> -o -r -v -f -noverify -synonym -g public activation.jar
loadjava -u SYS/<PASSWORD>@<CADENA_CONEXION> -o -r -v -f -noverify -synonym -g public mail.jar
Los archivos mail.jar y activation.jar se pueden descargar de este enlace:[Descarga no encontrada]
Los permisos se tendrán en cuenta en la próxima conexión por lo que si tenemos alguna conexión abierta hay que cerrarla y volver abrirla.
Uso de JMAIL para enviar correo electrónico
IMPORTANTE: Desde Líbra nunca se debe de ejecutar directamente ninguna función del paquete JMAIL, siempre se debe de ejecutar a través del paquete PK_EMAIL. Para más información dirigirse a la documentación de desarrollo, al apartado «Gestión de correos electrónicos».
Una vez configurado en la base de datos para usarlo hay que ejecutar una llamadaa JMAIL.SENDMAIL:
DECLARE rdo VARCHAR2(30); v_errormessage VARCHAR2(4000); BEGIN rdo := jmail.sendmail(<servidor_smtp>, <puerto>, <usuario_validación_smtp>, <password_validación_smtp>, <acuse_recibo>, <dirección_email_remitente>, <dirección_email_destino>, <dirección_email_cc>, <direccion_email_bcc>, <asunto>, <cuerpo>, v_errormessage, <adjuntos>, <grabar_log>); END;
- <servidor_smtp>: Dirección del servidor de SMTP.
- <puerto>: Puerto TCP en el que escucha el servidor SMTP, normalmente el 25
- <usuario_validación_smtp>: Usuario para validarse en el servidor SMTP, se pasará NULL en caso de que el servidor SMTP no necesite validación
- <password_validación_smtp>: Contraseña del usuario del parámetro anterior.Se pasará NULL en caso de que el servidor SMTP no necesite validación
- <acuse_recibo>: Acuse de recibo. Si se pasa S se solicitará confirmación al receptor del mensaje.
- <dirección_email_remitente>: Dirección de correo electrónico del que envía el mensaje
- <dirección_email_destino>: Dirección de correo electrónico de destino
- <dirección_email_cc>: Dirección de correo electrónico para enviar copia CC
- <dirección_email_bcc>: Dirección de correo electrónico oculta para enviar copia BCC
- <asunto>: Asunto del correo electrónico
- <cuerpo>: Cuerpo del mensaje del correo electrónico
- v_errormessage: Parámetro de retorno, en caso de producirse un error devolverá el texto del error producido.
- <adjuntos>: Lista de adjuntos. Ver «Tratamiento de adjuntos». Se pasará NULL en caso de no haber adjuntos.
- <grabar_log>: Grabar LOG en la tabla ed_mail_log
Tratamiento de adjuntos
DECLARE v_attachments jmail.attachments_list; rdo VARCHAR2(4000); BEGIN v_attachments := jmail.attachments_list('/oracle/archivo1.txt'); v_attachments := jmail.attachments_list('/oracle/archivo2.txt'); rdo := jmail.sendmail(..., v_attachements, ..); END; /
IMPORTANTE: Al directorio en donde se encuentran los archivos a adjuntar hay que darle permisos de lectura con la siguiente instrucción desde SYS:
exec dbms_java.grant_permission(‘<usuario LIBRA en mayúsculas>’,’java.io.FilePermission’, ‘<directorio>\*’, ‘read’);
Si la base de datos está en Linux cambiar ‘<directorio>*’ por ‘<directorio>/*’ Ejemplo:
Ver los permisos que hay aplicados a Java
Se pueden consultar en la vista DBA_JAVA_POLICY