我正在尝试在安装Oracle Database 12.2之后安装最新的JavaMail . JavaMail在以前的数据库服务器上运行良好 . 它不起作用,我在我的智慧结束 . 这是错误跟踪:
DEBUG: not loading system providers in <java.home>/lib
DEBUG: not loading optional custom providers file: /META-INF/javamail.providers
DEBUG: can't load default providers file/META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {}
DEBUG: Providers Listed By Protocol: {}
DEBUG: not loading optional address map file: /META-INF/javamail.address.map
Exception in thread "Root Thread" javax.mail.NoSuchProviderException: No
provider for imap
at javax.mail.Session.getProvider(Session.java:289)
at javax.mail.Session.getStore(Session.java:363)
at javax.mail.Session.getStore(Session.java:343)
at javax.mail.Session.getStore(Session.java:329)
at MailHandlerImpl.connectToServerSSL(MailHandler:453)
如您所见,它无法加载提供程序 . 我已经确定JavaMail文件夹中的javax.mail.jar文件实际上包含提供程序文件 .
这就是我所做的(我将公司名称更改为CUSTOMER,将Oracle用户名更改为OracleUser,否则这些是确切的语句):
步骤1:安装软件
-
已安装Oracle数据库12.2
-
Java:
-
在C:\ Program Files \ Java \ jdk1.8.0_181中安装了jdk1.8.0_181
-
下载了Javamail 1.6.1
-
将Javax.mail.jar复制到c:\ JavaMail
-
已下载jaf-1.1.1
-
安装在c:\ jaf-1.1.1中
-
环境变量:
-
CLASSPATH . ; C:\ JavaMail \ javax.mail.jar
-
JAVA_HOME C:\ Progra~1 \ Java \ jdk1.8.0_181
-
JAVAMAIL_JAR C:\ JavaMail \ javax.mail.jar
-
LD_LIBRARY_PATH%JAVA_HOME%\ lib
-
ORACLE_HOME D:\ app \ Oracle \ product \ 12.2.0 \ dbhome_1
-
PATH .; C:\ JavaMail; C:\ Progra~1 \ Java \ jdk1.8.0_181 \ bin; D:\ app \ Oracle \ product \ 12.2.0 \ dbhome_1 \ bin; D:\ app \ Oracle \ product \ 12.2.0 \ dbhome_1 \ opatch; D:\ app \ Oracle \ product \ 12.2.0 \ dbhome_1 \ perl \ bin;%SystemRoot%\ system32; ...加上路径的其余部分
步骤2:创建ACL
- 为SMTP创建ACL:
BEGIN
DBMS_NETWORK_ACL_ADMIN.create_acl (
acl => 'mail_for_oracleuser.xml',
description => 'Oracle User access to Customer email',
principal => 'ORACLEUSER',
is_grant => TRUE,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date => NULL);
END;
BEGIN
DBMS_NETWORK_ACL_ADMIN.assign_acl (
acl => 'mail_for_oracleuser.xml',
host => 'MAILSERVER.CUSTOMER.LOCAL',
lower_port => 25,
upper_port => NULL);
END;
- 为IMAP创建ACL
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
acl => 'mail.xml',
description => 'MAIL ACL',
principal => 'ORACLEUSER',
is_grant => true,
privilege => 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'mail.xml',
principal => 'ORACLEUSER',
is_grant => true,
privilege => 'resolve');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
acl => 'mail.xml',
host => 'mail.customer.org');
END;
BEGIN
DBMS_NETWORK_ACL_ADMIN.DROP_ACL(
acl => '/sys/acls/customer_email_server_wallet.xml');
END;
BEGIN
dbms_network_acl_admin.create_acl(
'customer_email_server_wallet.xml',
'Customer Email Server SSL Wallet ACL',
'ORACLEUSER',
TRUE,
'use-client-certificates');
dbms_network_acl_admin.assign_wallet_acl(
'customer_email_server_wallet.xml',
'file:d:/wallet');
END;
第3步:授予权限
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.net.SocketPermission', '10.10.80.10:143', 'connect,resolve' );
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.net.SocketPermission', '10.10.80.10:993', 'connect,resolve' );
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.net.SocketPermission', '10.10.80.21:143', 'connect,resolve');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.net.SocketPermission', '10.10.80.21:993', 'connect,resolve');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.net.SocketPermission', 'mail.customer.org', 'connect,resolve,send');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.net.SocketPermission', 'MAIL.CUSTOMER.ORG', 'connect,resolve,send');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.net.SocketPermission', 'mail.customer.org', 'resolve');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.net.SocketPermission', '[https://mail.customer.org]', 'connect, resolve');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.net.SocketPermission', '*', 'connect,resolve,send');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.util.PropertyPermission', '*', 'read,write');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.lang.RuntimePermission', 'getClassLoader','');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.io.FilePermission', '*', 'read,write');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.io.FilePermission', '*', 'execute');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.io.FilePermission', 'c:\javamail\javax.mail.jar', 'read');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.io.FilePermission', 'D:\app\Oracle\product\12.2.0\dbhome_1\lib\activation.jar', 'read');
call dbms_java.grant_permission('ORACLEUSER', 'SYS:java.io.FilePermission', 'C:\jaf-1.1.1\activation.jar', 'read');
call dbms_java.grant_permission('PUBLIC', 'SYS:java.io.FilePermission', 'c:\javamail\javax.mail.jar', 'read');
call dbms_java.grant_permission('PUBLIC', 'SYS:java.io.FilePermission', 'D:\app\Oracle\product\12.2.0\dbhome_1\lib\activation.jar', 'read');
call dbms_java.grant_permission('PUBLIC', 'SYS:java.io.FilePermission', 'C:\jaf-1.1.1\activation.jar', 'read');
编辑:我注意到在类路径中没有列出activation.jar . 我补充说,重新启动服务器并收到完全相同的结果 .