java - Java 存储过程中没有 imaps 错误的提供者
问题描述
我正在尝试使用保存在 Oracle 数据库中的 Java 类从我的 gmail 中获取电子邮件。目前我使用 Oracle 数据库 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>
类和源都是“有效的”
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: 没有 imap 的提供程序
有没有办法避免这个错误?
解决方案
使用该loadjava
实用程序将必要的依赖项(看起来是javax.mail.jar
)存储在数据库中,以便 Oracle 可以在其类路径中找到它们。
例如:
loadjava -user <user>/<password> -resolve javax.mail.jar
推荐阅读
- unity3d - Unity - 如何给对撞机一些灵活性
- swift - 按钮最初在工具栏中显示为灰色
- html - 为什么我的引导 v5 卡在垂直窗口调整大小时移动?
- google-sheets - 反向百分比公式
- python - 正则表达式搜索熊猫数据框中的整列
- javascript - Webpack 5 - 来自 node_modules 的安静警告?
- reactjs - 从 inputComponent 捕获 onChange 事件传递给 OutlinedInput,Material UI
- python - 线程内的异步函数
- python - 使用 Libvirt Python createXMLFrom 克隆卷导致读取数据时文件结束:输入/输出错误
- mongodb - 更改对象数组中对象中的字段