Estoy tratando de conseguir correos electrónicos de Gmail usando mi clase Java que se almacenan en la base de datos Oracle. Actualmente uso de bases de datos Oracle 12.2.
Este es mi código fuente de Java:
import java.io.IOException;
import java.sql.SQLException;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMultipart;
public class GmailInbox {
public static void main(String[] args)
throws SQLException, MessagingException, IOException
{
read();
}
public static String read()
throws SQLException, MessagingException, IOException
{
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("smtp.gmail.com", "*********@gmail.com","password");
Folder inbox = store.getFolder("inbox");
inbox.open(Folder.READ_ONLY);
int messageCount = inbox.getMessageCount();
System.out.println("Total Messages:- " + messageCount);
Message[] messages = inbox.getMessages();
System.out.println("------------------------------");
for (int i = messages.length - 1; i >= messages.length-3 ; i--) {
Message message = messages[i];
System.out.println("---------------------------------");
System.out.println("Email Number " + (i + 1));
System.out.println("Subject: " + message.getSubject());
System.out.println("Date: " + message.getReceivedDate());
System.out.println("From: " + InternetAddress.toString(message.getFrom()));
}
inbox.close(true);
store.close();
return("Done");
}
}
Es perfectamente funciona en el IDE de Eclipse.
Cargué esta fuente Java en la base de datos por
loadjava -user <user>/<password> -verbose -resolve <path_to_java_code>
Tanto la clase y Fuente son "válidos" por
select DBMS_JAVA.LONGNAME(OBJECT_NAME) as object_name,
object_type,
status,
from user_objects
where object_type like 'JAVA%';
Después de que he creado una función:
create or replace function TestGmail
return varchar2
is language java name
'GmailInbox.read() return String';
Por último, cuando estoy tratando de ejecutar esta clase en Oracle por este código:
declare
output varchar2(50);
begin
output := TestGmail;
dbms_output.put_line(output);
end;
Estoy consiguiendo el error:
ORA-29532: Java llamada terminada por no detectada excepción de Java: javax.mail.NoSuchProviderException: Ningún proveedor de imaps
¿Hay alguna manera de evitar este error?
Usar la loadjava
utilidad para almacenar las dependencias necesarias (que parece ser javax.mail.jar
) en la base de datos de Oracle de manera que se puede encontrar en su ruta de clase.
Por ejemplo:
loadjava -user <user>/<password> -resolve javax.mail.jar