Javaストアド・プロシージャでIMAPSエラーのプロバイダいいえ

Oiale:

私は、Javaクラスを使用して自分のGmailからのメールは、Oracleデータベースに保存されて取得しようとしています。現在、私は、Oracle Database 12.2を使用します。

これは私の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");
 }

}

それは完璧のEclipse IDEで動作します。

私がして、データベースには、このJavaソースをロード

loadjava -user <user>/<password> -verbose -resolve <path_to_java_code>

クラスとソースの両方をすることによって、「VALID」です

select DBMS_JAVA.LONGNAME(OBJECT_NAME) as object_name,
       object_type,
       status,
from user_objects
where object_type like 'JAVA%';

その後、私は、関数を作成しました:

create or replace function TestGmail
return varchar2
is language java name
'GmailInbox.read() return String';

最後に、私はこのコードによって、Oracleでこのクラスを実行しようとしているとき:

declare 
output varchar2(50);
begin 
  output := TestGmail;
  dbms_output.put_line(output);
end;

私はエラーを取得しています:

ORA-29532:キャッチされないJava例外でJavaコールが終了:javax.mail.NoSuchProviderException:IMAPSなしのプロバイダ

このエラーを回避する方法はありますか?

MT0:

使用するloadjavaユーティリティを(ように見える必要な依存関係を保存するためにjavax.mail.jar、Oracleはそのクラスパスにそれらを見つけることができるようにデータベースに)。

例えば:

loadjava -user <user>/<password> -resolve javax.mail.jar

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=217715&siteId=1