Configuración y uso de JMAIL

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;
Parámetros:
  • <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

Los adjuntos deben de encontrarse en una carpeta del servidor en donde se está ejecutando la base de datos. Para construir la lista 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:

exec dbms_java.grant_permission(‘LIBRA’,’java.io.FilePermission’, ‘C:\Oracle\directorios\blobtemp\*’, ‘read’);

Ver los permisos que hay aplicados a Java

Se pueden consultar en la vista DBA_JAVA_POLICY

SELECT *
FROM dba_java_policy;

 

Start typing and press Enter to search