`
helloyesyes
  • 浏览: 1304298 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

如何远程访问Domino邮箱数据

阅读更多

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

应用场景

我们需要远程访问IBM Lotus Domino R6服务器,从中获取用户邮箱的邮件信息等关键数据。我们不需要提供每一个用户密码以及ID文件。

技术关键词

Java

Java Lotus Notes/Domino 是理想的开发组合。

DIIOP

IIOPInternet Inter-ORB Protocol一种传输层协议。它用于CORBA 2.0及兼容平台上。IIOP协议是要建立以下几个部分:一个IIOPHTTP的网关,使用这个网关可以让CORBA客户访问WWW资源;一个HTTPIIOP的网关,通过这个网关可以访问CORBA资源;一个为IIOPHTTP提供资源的服务器,一个能够将IIOP作为可识别协议的浏览器。

其中ORBObject Request Broker(请求对象代理)一个中间件。它可以建立对象之间的client/server关系。通过ORB,一个client可以透明的引用同一台机器上或网络上的一个server对象的方法。ORB解释该调用并负责查找一个实现该请求的对象,找到后,把参数传给该对象,调用它的方法,最后返回结果。

那么,DIIOPDomino IIOP什么意思呢就是一个服务器端的任务通过Domino ORB来使得Domino ServerJava applets交互双方使用IIOP来交互和交换对象数据。

IOR

IORInteroperable Object Reference

实际上,就是Domino服务器上的一个文件diiop_ior.txt的内容,类似于:

IOR:01012d032900000049444c<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chmetcnv w:st="on" unitname="a" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0">3a</chmetcnv><chmetcnv w:st="on" unitname="C" sourcevalue="6" hasspace="False" negative="False" numbertype="1" tcsc="0">6c</chmetcnv><chmetcnv w:st="on" unitname="F" sourcevalue="6" hasspace="False" negative="False" numbertype="1" tcsc="0">6f</chmetcnv>………………………

,它在c:\lotus\domino\data\domino\html文件夹下。

客户端java程序向domino服务器发出CORBA请求服务器通过HTTP协议返回给客户端IOR字符串,之后客户端通过IIOP协议与服务器进行通讯。

从这一点来看,IOR 实际上是一个对象的字符串编码,包含对Domino服务器的 CORBA 访问的识别信息。客户java程序将字符串 IOR 解码,就可以用它来寻找到对应的主机并建立远程会话了。

Domino对象

Domino对象类的结构基于包容模型,包容模型定义了对象的范围。容器对象通常被用来访问它所包含的子对象。
关闭一个容器对象意味着其包含的全部子对象也将被关闭。例如,你建立了一个Database对象,使用它创建了一个Document对象,如果关闭了 Database对象,Document 对象也会随之关闭。如果容器对象超时,它将会被自动关闭,其包含的对象也将被自动关闭。因此你应该在容器对象超时或关闭前保存你的任何改变。

Domino Database

Domino中的Database,指的是在一个名字下存储的,一个集合,包含了Document以及相应的formviewfolderJava中有lotus.domino.Database

我们通常可以通过session对象的getDatabase方法,或者DbDirectory对象的getFirstDatabase/ getNextDatabase方法,来获取Database对象的实例。

Domino View

Database集合中有着各种ViewJava中有lotus.domino.View。可以通过Database对象的getView方法,来获取View对象的实例。

Domino Document

Domino中的Document,指的是在一个Database的一个条目,包含了filedstextnumbersgraphics等等。Java中有lotus.domino.Document

可以通过Database对象的getView方法,来获取View对象的实例。

环境准备

客户端java开发:

安装Lotus Notes Client

安装Eclipse 3.1 with Eclipse-JDT-SDK

安装JRE <chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.3.1</chsdate>Lotus Notes/Domino R5/6版本使用的是 Jav<chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">a 1.3.1</chsdate>,所以必须安装该软件以使用正确的版本来编译项目。(Lotus Notes/Domino 7 使用 JDK 1.4。)虽然许多 Java 代理和程序都可以编译,而且没什么问题,但可能会陷入另一些问题,比如使用一个 JDK 版本构建程序,却在另一个版本上运行。

从服务器端Lotus目录下复制NCSO.jar以及NCSO.cab文件。远端访问Domino Server,需要这个jar包。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202" path=" m0,0 l0,21600,21600,21600,21600,0 xe"><stroke joinstyle="miter"></stroke><path gradientshapeok="t" o:connecttype="rect"></path></shapetype><shape id="_x0000_s1026" style="WIDTH: 610.65pt; HEIGHT: 199.65pt; mso-position-horizontal: absolute; mso-position-horizontal-relative: char; mso-position-vertical: absolute; mso-position-vertical-relative: line" coordsize="21600,21600" type="#_x0000_t202" fillcolor="#ffffe3"><lock v:ext="edit" aspectratio="t"></lock><textbox style="MARGIN-TOP: 4.718pt; LEFT: auto; MARGIN-LEFT: 8.312pt; WIDTH: 595.5pt; TOP: auto; HEIGHT: 191.687pt; mso-next-textbox: #_x0000_s1026"><table cellspacing="0" cellpadding="0" width="100%"><tbody><tr><td> <div> <p class="MsoNormal" style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Domino </span><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">提供了两个<span lang="EN-US"> JAR </span>文件,用于编程访问<span lang="EN-US"> Domino </span>对象。这两个文件是<span lang="EN-US"> Notes.jar </span>和<span lang="EN-US"> NCSO.jar</span>。<span lang="EN-US">Notes.jar </span>用来访问 本地的<span lang="EN-US"> Domino </span>服务器(此时<span lang="EN-US"> Lotus Domino </span>和<span lang="EN-US"> Java </span>程序运行在相同的服务器上)。<span lang="EN-US">NCSO.jar </span>包含了用来访问远程服务器的其他<span lang="EN-US"> CORBA/IIOP </span>代码。<span lang="EN-US"><p></p></span></span></p> <p class="MsoNormal" style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">在决定使用哪个<span lang="EN-US"> JAR </span>文件时,请考虑以下因素: <span lang="EN-US"><p></p></span></span></p> <ul type="disc"> <li class="MsoNormal" style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"> <span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">运行的<span lang="EN-US"> Java </span>程序和<span lang="EN-US"> Lotus Domino </span>的相对关系如何?如果它们运行在相同的机器上,那么使用<span lang="EN-US"> Notes.jar </span>可以获得更好的性能。 <span lang="EN-US"><p></p></span></span> </li> <li class="MsoNormal" style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"> <span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">您关心可扩展性吗?即使现在您是在相同的机器上运行<span lang="EN-US"> Java </span>程序(单独的<span lang="EN-US"> Java </span>程序和非<span lang="EN-US"> J2EE </span>的程序)和<span lang="EN-US"> Lotus Domino</span>,将来您可能会发现需要将其扩展到专用的服务器上。在这种情况中,请使用<span lang="EN-US"> NCSO.jar </span>,这样可以获得更好的适应能力。 <span lang="EN-US"><p></p></span></span> </li> <li class="MsoNormal" style="TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Java </span><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">程序要在一个应用服务器上运行吗?在<span lang="EN-US"> WebSphere </span>的情况中,即使它与<span lang="EN-US"> Lotus Domino </span>在相同的机器上,也需要使用<span lang="EN-US"> NCSO.jar</span>。<span lang="EN-US"><p></p></span></span> </li> </ul> </div> </td></tr></tbody></table></textbox><?xml:namespace prefix = w ns = "urn:schemas-microsoft-com:office:word" /><wrap type="none"></wrap><anchorlock></anchorlock></shape><shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" path=" m@4@5 l@4@11@9@11@9@5 xe" o:preferrelative="t" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0 "></f><f eqn="sum @0 1 0 "></f><f eqn="sum 0 0 @1 "></f><f eqn="prod @2 1 2 "></f><f eqn="prod @3 21600 pixelWidth "></f><f eqn="prod @3 21600 pixelHeight "></f><f eqn="sum @0 0 1 "></f><f eqn="prod @6 1 2 "></f><f eqn="prod @7 21600 pixelWidth "></f><f eqn="sum @8 21600 0 "></f><f eqn="prod @7 21600 pixelHeight "></f><f eqn="sum @10 21600 0 "></f></formulas><path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype>

如果你不用超级管理员用户名密码创建连接session,而是采用Domino Server ID,那么请从Domino服务器上Lotus目录下复制一个server.id文件以备用。

如果你想直接使用diiop_ior.txt把这个diiop_ior.txt复制到本地。

Domino服务器端配置:

必须配置的项目:

必须设置 Domino 服务器监听 IIOP 请求

首先确保安装了DIIOP,你可以在安装过程中选择DIIOP,这样当安装结束,启动Domino Server Console时,就会看到提示“

DIIOP Server Listen for connect requests on <place w:st="on"><placename w:st="on">TCP</placename><placetype w:st="on">Port</placetype></place>:63148

DIIOP Server Ultility task”。

可以在 Domino Console中执行 show task load diiop 命令,可以帮助判断现在是否已经安装了 DIIOP。如果还没有安装,请从 Domino 安装光盘上安装 DIIOP

否则,就要修改lotus目录下的Notes.ini文件了。找到以ServerTask开头的一行,找找看等号后面的字符串中是否有DIIOP,如果没有,就加上一个,然后重新启动Domino Server。这样,Domino启动时就会自动加载DIIOP

ServerTask一行类似于:

ServerTasks=Update,Replica,Router,AMgr, AdminP,CalConn,Sched,DIIOP,HTTP,LDAP

如何获取IOR

DIIOP 进程启动时,它在 Domino HTTP 根目录(Windows Domino 默认的安装目录为 C:\lotus\domino\data\domino\html)中创建一个名为 diiop_ior.txt IORInternet Object Reference)对象。

如何得到这个diiop_ior.txt内容(也就是IOR),有两个办法:

第一个就是,您通过HTTP方式向服务器请求这个文件。那么这个时候,如果您使用 Lotus Domino 作为 HTTP 服务器,就必须告诉 DIIOP 将这些文件放到您的 HTTP 服务器的根 HTML 目录中。配置方法如下所示:

1. 运行Domino Admin 6,点击“XXX Domain”图标,打开 Domino Server 文档。

2. 选择 Internet Protocols 属性页 - DIIOP 子属性页。

3. External HTML directory 字段中,输入非 Domino HTTP 服务器的根 HTML 目录的完整路径名。

4. 保存这个 Server 文档,并重新启动 DIIOP

第二个办法,是把这个diiop_ior.txt复制到客户端机器上,直接使用

TCP/IP连接检查:

远程访问还需要设置 Domino Server和客户端进行 TCP/IP 连接。Domino Server必须能够通过 TCP/IP 进行访问。必须能够用 Internet 名称从客户端ping 到服务器。

DIIOP设置:

检查 Domino Directory Server 文档。转至 Ports 选项卡,然后转向 Internet Ports 选项卡。查看 Web 选项卡(用于 HTTP)并找到 DIIOP 选项卡。这些部分有用于指定端口号以及启用/禁用端口的字段。通常,HTTP 的端口号是 80DIIOP 的端口号是 63148。下图显示了 Internet Ports--DIIOP 选项卡:

No.

Items

Descriptions

1

Name and Password

DIIOP 验证需要名称和密码

2

Anonymous

DIIOP 验证不需要名称和密码

3

Enforce server access settings

DIIOP 使用 Security 选项卡下的 Server Access 设置

如果访问数据库时不知道文件名称(例如,要使用 DbDirectory.getFirstDatabase),那么必须允许通过网络浏览文件名。转至 Internet Protocols 选项卡、HTTP 选项卡和 R5 Basics 选项卡。然后将“Allow HTTP clients to browse databases”设为 Yes


配置权限:

必须给你当前建立session的用户配置权限,否则你将会遇到下面的错误:

NotesException: You must have permission to sign documents for server based agents

at lotus.domino.NotesExceptionHelper.read(Unknown Source)

at lotus.domino.NotesExceptionHolder._read(Unknown Source)

at lotus.priv.CORBA.iiop.RepImpl.invoke(Unknown Source)

at lotus.priv.CORBA.portable.ObjectImpl._invoke(Unknown Source)

at lotus.domino.corba._IDocumentStub.send(Unknown Source)

at lotus.domino.cso.Document.send(Unknown Source)

at SendMail.send(SendMail.java:203)

at SendMail.main(SendMail.java:28)

转至 Security 选项卡,找到“Programmability Restrictions”,在“Run unrestricted methods and operations:”和“Sign agents to run on behalf of someone else:”后面输入你的用户名:

<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" path=" m@4@5 l@4@11@9@11@9@5 xe" o:preferrelative="t" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0 "></f><f eqn="sum @0 1 0 "></f><f eqn="sum 0 0 @1 "></f><f eqn="prod @2 1 2 "></f><f eqn="prod @3 21600 pixelWidth "></f><f eqn="prod @3 21600 pixelHeight "></f><f eqn="sum @0 0 1 "></f><f eqn="prod @6 1 2 "></f><f eqn="prod @7 21600 pixelWidth "></f><f eqn="sum @8 21600 0 "></f><f eqn="prod @7 21600 pixelHeight "></f><f eqn="sum @10 21600 0 "></f></formulas><path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype>

总之,如果你遇到了权限错误,就到这里来配置。


开始编写

Add External JARs

Eclipse 3.1,选中你的项目,右键菜单中“Build PathàAdd External Archives”,在文件选择对话框中找到并选中你前面复制到本地的NCSO.jar,如下图所示。

添加了 JAR 文件之后,可以使用项目中 Notes Java API 定义的类和接口。 Domino Designer on-line help 中有关于 Notes Java API 的文档。

然后选择 JRE System Library采用<chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">1.3.1</span></chsdate>版本的。

获取IOR

首先,我们去获取IOR

还是前面说过的两种办法。

第一种,与Domino Server联系获取:

Code

String dominoHost = "192.168.1.223"; // 这里填写主机名或IP地址

String strIOR = null;

URL url = new URL("http://" + dominoHost + "/diiop_ior.txt");

InputStream in = url.openStream();

BufferedReader br = new BufferedReader(new InputStreamReader(in));

for (boolean bExit = false; !bExit; ) {

String line = br.readLine();

if (line == null) {

bExit = true;

}

else {

if (strIOR == null)

strIOR = line;

else

strIOR = strIOR + line;

if (strIOR.startsWith("IOR:"))

bExit = true;

}

}

br.close();

第二种,取得本地文件:

Code

FileInputStream fin = new FileInputStream("c:\\diiop_ior.txt");

InputStreamReader fisr = new InputStreamReader(fin);

BufferedReader br = new BufferedReader(fisr);

String ior = br.readLine();

fin.close();

创建session

我们调用NotesFactorycreateSessionWithIOR方法,通过前面获取的IOR,创建一个session对象。

Code

Session s = NotesFactory.createSessionWithIOR(ior,

"super admin" ,"admin password");

打开names.nsf

我们调用sessiongetDatabase方法,打开指定服务器上的names.nsf”数据库

Code

final static String DB_NAMES = "names.nsf";

Database dbCache = s.getDatabase(s.getServerName(),

DB_NAMES, false);

得到Users View

我们调用DatabasegetView方法,打开指定数据库上的($Users)”视图

Code

border-right: white 1pt solid; padding-right: 5.75pt; border-top: medium none; padding-left: 5.75pt; background: #e6e6e6; padding-bottom: 0.7pt; bo
分享到:
评论

相关推荐

    如何用java远程访问Domino邮箱数据

    Java远程访问Domino邮箱数据是通过使用Lotus Domino Java API(Lotus Domino JNA或Lotus Domino Access for Java)来实现的。这个过程涉及到多个步骤和技术,包括理解Lotus Domino的架构、设置Java环境以及使用特定...

    Domino的Java编程指南

    - **远程访问Domino邮箱数据**: 使用Java进行远程访问的方法。 - **远程操作Domino服务器**: 通过DIIOP进行远程操作的技术文档。 - **DominoWeb开发环境**: 构建Web应用程序的环境搭建指南。 - **配置Notes客户端**:...

    Domino6.5 管理入门

    - 提供了基于 Web 的访问方式,用户可以通过 Web 浏览器访问 Domino 数据库中的数据。 ##### 2. 通讯协作 - 支持即时消息、视频会议等多种沟通方式,促进团队间的协作交流。 通过以上详细介绍可以看出,Domino ...

    Domino inotes配置.docx

    总之,Domino Web Access/iNotes是一个强大且灵活的Web邮件和协作平台,通过适当的配置和管理,能够为用户提供便捷的远程访问和协作体验。在现代企业环境中,DWA可以帮助提升生产力,同时满足移动办公和远程工作的...

    domino培训教程

    - **远程访问**:支持远程访问,方便出差或在家工作的员工使用。 ##### 2. 通讯协作 - **即时消息**:内置即时消息功能,支持实时沟通。 - **视频会议**:集成视频会议功能,支持多人在线会议。 - **文件共享**:...

    IBM_Lotus_Domino和Notes_6.5培训教程

    这一功能特别适用于远程工作场景,使用户无论身处何地都能访问企业资源。 ##### 通讯协作 Lotus Notes提供了全面的通讯协作工具,包括即时消息、视频会议、在线会议和文件共享。这些工具促进了团队成员之间的实时...

    BlackBerry_Enterprise_Server_for_IBM_Lotus_Domino

    该软件使得企业用户能够通过BlackBerry设备访问其Lotus Domino邮箱中的电子邮件、日历、联系人等信息,同时提供了安全的数据传输和管理功能。 #### 二、版本信息 - **版本:** 5.0 - **服务包:** SP3 - **维护版本:...

    ibm lotus 952认证

    这种方式不仅可以确保数据的一致性,还能够优化远程用户的访问性能。因此,选择创建副本的方式最为合适。 ##### 2. 表格数据展示 **问题**: Herb 需要在表单中展示一些数据,并希望这些数据以格式化的表格形式呈现...

    微软备战“云计算”服务器每月增1万台.pdf

    云计算是一种计算资源共享和服务交付模式,通过互联网将大规模的数据中心中的计算资源、应用程序等服务提供给远程用户使用。微软的传统业务模式主要是销售在本地服务器和个人电脑上运行的软件,但随着云计算的发展,...

    Lotus Notes 的最终用户最需知道的十件事

    9. **移动设备同步**:通过 Domino Server,用户可以将 Lotus Notes 与智能手机和平板电脑同步,随时随地访问数据和进行工作。 10. **知识库与学习资源**:Lotus Notes 社区提供了丰富的学习资源和论坛,用户可以...

    lotus服务器常用命令大全

    - **注意事项**: 不支持通过远程控制台重启服务器。 **Hang up portname** - **功能**: 挂断指定端口。 - **使用场景**: 当需要临时停止某个端口上的通信时使用。 **Help** - **功能**: 显示服务器命令列表及简短...

    BlackBerry_7230

    为了保障企业数据的安全,BlackBerry 7230提供了详尽的安全设置选项,包括密码保护、远程擦除、加密通信等,有效防止了数据泄露的风险。 ##### 3. 互联网浏览 尽管受限于当时的网络速度和技术,BlackBerry 7230仍...

Global site tag (gtag.js) - Google Analytics