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:

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;
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;

 

Related Posts Plugin for WordPress, Blogger...

LIBRA Oracle ERPLIBRA, software de gestión empresarial (ERP-CRM-BPM) basado en ORACLE, desarrollado por la empresa EDISA. Más información

En las próximas horas recibirás respuesta a tu comentario en el correo indicado:

  • Diego

    Hola, quisiera saber si el jmail soporta SSL, muchas gracias

    • elias.fernandez

      Sí que lo soporta, para ssl hay que añadir las siguientes propiedades:

      props.put(“mail.smtp.socketFactory.port”, Port);
      props.put(“mail.smtp.socketFactory.class”, “javax.net.ssl.SSLSocketFactory”);

      y para STARTTLS:

      props.put(“mail.smtp.starttls.enable”, “true”);