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: Descargar: permisos_java.sql
- 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:
Descargar: Archivos .jar necesarios para el paquete jmail en Oracle 11g
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
