`
kakajw
  • 浏览: 265329 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于Java程序调用Lotus Notes邮件服务发送邮件的实现(二实践)

 
阅读更多

关于Java程序调用Lotus Notes邮件服务发送邮件的实现(二实践)

在第一部分中已找到该问题的解决思路,该部分主要叙述思路3(通过远程连接Domino服务器发送邮件)的实现过程,该过程主要分为两部分:Domino配置和程序代码。

 

一、Domino配置

通过阅读IBM官网的Lotus 官方文档架构师的文章(JavaDomino Objects的访问:

http://www.ibm.com/developerworks/cn/lotus/ls-java_access_pt1/index.html),你会发现,要通过远程连接的方式发送邮件,需要Domino服务器开启 DIIOP 任务和端口以及其他相关配置正确,配置项如下:

A.确保已开启 DIIOP 任务

要在服务器上启动 HTTP DIIOP 任务,需要确保这些任务在 Notes.ini 文件 ServerTasks 变量的任务列表中; 

如果正确配置了 Server 文档该文件,Notes.ini 文件应该包含类似于下面的行:ServerTasks=Update,Replica,Router,AMgr, AdminP,CalConn,Sched,DIIOP,HTTP,LDAP

 

也可从运行的服务器,在控制台中输入下列命令来临时加载任务:

启动 DIIOP 任务:load diiop

但是在Domino服务器重启后,以命令加载DIIOP任务的方式无效

 

B.服务器配置文件的配置

1.访问控制(指定DIIOP服务端口,并设置为以用户名密码方式访问DIIOP服务)

Server 文档中,转至 Ports 选项卡、Internet Ports 选项卡和 DIIOP 选项卡。

设置DIIOP 的端口号,默认为 63148

设置Name&password字段为yes

如下所示:

 

 

2.BASIC选项卡 配置(配置“Fully qualified Internet host name”字段)

在服务器 Server 文档 Baiscs 选项卡的“Fully qualified Internet host name”字段中,确保该字段已设置为域名或IP地址,如下所示:

 

 

Fully qualified Internet host name”字段是 createSession 主机的(第一个)参数。

也可以使用服务器的 IP 地址。例如,如果 myhost.east.acme.com IP 地址是 9.95.73.30,那么下列任何一个调用都有效:

Session s = NotesFactory.createSession("myhost.east.acme.com:63148")

或者 Session s = NotesFactory.createSession("9.95.73.30:63148")

 

3. TCP/IP的网络地址项配置

打开当前服务器文档”–>“port”–>“Notes Network port”–>“TCPIP”–>“Net Address”项,

 Net Address的值设定为服务器主机的IP地址。

 

 

 

 

 

 

二、程序代码

 

  1.定义邮件实体类MailContent

 

package com.jhh;

public class MailContent {
	private String form;
	private String subject;
	private String body;
	
	MailContent(){		
	}
	
	MailContent(String body){
		this(null,null,body);
	}
	
	MailContent(String subject,String body){
		this(null,subject,body);
	}
	
	MailContent(String form,String subject,String body){
		this.form = form;
		this.subject = subject;
		this.body = body;
	}	
	
	
	public String getForm() {
		return form;
	}
	public void setForm(String form) {
		this.form = form;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getBody() {
		return body;
	}
	public void setBody(String body) {
		this.body = body;
	}
	
	
}

 

 

 2.核心类NotesMailManager

 

 

package com.jhh;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.Vector;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.NotesException;
import lotus.domino.NotesFactory;
import lotus.domino.Session;

public class NotesMailManager {	
	private String recipients;
	private String dominoServerName;
	private String userFilePath;
	private String host;
	private String userName;
	private String password;	

	
	public Session getNotesSession(){
		Session session = null;		

		try {
	 		session = NotesFactory.createSession(host,userName,password);			
		} catch (NotesException e) {
          System.out.println("Error happens when creating session using DIIOP port.");  
          e.printStackTrace();
          return null;
		}
		return session;
	}
	
	public Session getNotesSession(String host,String userName,String passwd){
		this.setHost(host);
		this.setUserName(userName);
		this.setPassword(passwd);
        return getNotesSession();
	}
	
	public void sendMail(Session session,MailContent mailContent){
		if (session == null){
			System.out.println("Fail to send mail for: session is null!");
			return;
		}	    
	    boolean isloaded = loadProperty();
	    Database database = null;
	    Document mailDom = null;	    
	    if (isloaded){		    	
			try {
				System.out.println("User: " + session.getUserName());
			    database = session.getDatabase(dominoServerName,userFilePath,true);			    
		    	System.out.println("Database URL: "+database.getURL());
			    mailDom = database.createDocument();   
			    mailDom.replaceItemValue("Form",mailContent.getForm());   
			    mailDom.replaceItemValue("Subject",mailContent.getSubject());
			    mailDom.replaceItemValue("Body",mailContent.getBody());
			    Vector<String>  recipientsVector = new Vector<String>();
			    String [] recipientArray = recipients.split(",");
			    System.out.print("send to: ");
			    for(String rept:recipientArray){
			    	recipientsVector.add(rept);
			    	System.out.print(rept+"  ");
			    }
			    mailDom.save();
			    mailDom.send(recipientsVector);			   
			} catch (NotesException e) {
				System.out.println("Fail to send mail for NotesException!");
				e.printStackTrace();
				return;
			}finally{
				try {
					if (mailDom != null){
						mailDom.recycle();
						mailDom = null;
					}
					if (database != null){
						database.recycle();
						database = null;
					}
					if (session != null ){
						session.recycle();
						session = null;
					}
				}catch (NotesException e1){
					
				}
			}
		  System.out.println("\n Done! The mail has been successfully sent.");  
	    }			
		
    }
	
	public boolean loadProperty(){
        InputStream in = this.getClass().getResourceAsStream("/Mail.properties");
        Properties props = new Properties();
         try {
			props.load(in);
		} catch (IOException e) {
			try {
				if (in != null){
					in.close();
				}
				in = null;
			} catch (IOException e1) {		
				e1.printStackTrace();
			}
			e.printStackTrace();
			return false;
		}
        dominoServerName = props.getProperty("dominoServerName");
        userFilePath = props.getProperty("userFilePath");
        recipients = props.getProperty("recipientsAdress");
        host = props.getProperty("host");
        userName = props.getProperty("userName");
        password = props.getProperty("password");       
        return true;
	}

	public String getRecipients() {
		return recipients;
	}

	public void setRecipients(String recipients) {
		this.recipients = recipients;
	}

	public String getDominoServerName() {
		return dominoServerName;
	}

	public void setDominoServerName(String dominoServerName) {
		this.dominoServerName = dominoServerName;
	}

	public String getUserFilePath() {
		return userFilePath;
	}

	public void setUserFilePath(String userFilePath) {
		this.userFilePath = userFilePath;
	}

	public String getHost() {
		return host;
	}

	public void setHost(String host) {
		this.host = host;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}		
	
	
 }

 

3.程序测试入口类MailTest

package com.jhh;

import java.util.Date;
import lotus.domino.Session;

public class MailTest {

	public static void main(String[] args) {
		NotesMailManager manager = new NotesMailManager();
		boolean isloaded = manager.loadProperty();
		if (isloaded){
			Session session = manager.getNotesSession();
			MailContent mc = new MailContent("System mail--test","for mail test ! \n"+(new Date()).toString());
			manager.sendMail(session,mc);
		}
	}
}

 

 

 

  • 大小: 18.8 KB
  • 大小: 25.2 KB
  • 大小: 37.3 KB
分享到:
评论
2 楼 kakajw 2013-03-07  
原因可能是用户认证失败。
请参考本系列第三集:http://kakajw.iteye.com/blog/1768820 ,完成用户注册和配置

hbxflihua 写道
你好,我看了你的博客,写的很好。我在你的代码进行测试的时候,一直出现这样的异常:
NotesException: Notes error: You are not authorized to use the server
能说说解决的方法么?谢谢!
1 楼 hbxflihua 2013-03-01  
你好,我看了你的博客,写的很好。我在你的代码进行测试的时候,一直出现这样的异常:
NotesException: Notes error: You are not authorized to use the server
能说说解决的方法么?谢谢!

相关推荐

    java连接Lotes邮件服务器(Domino) 读取邮件内容附件完整实例

    在Java编程中,连接到IBM Lotus Domino(也称为Lotes)邮件服务器并读取邮件内容和附件是一项常见的任务。Lotus Domino是IBM提供的一款企业级的协作软件,它集成了电子邮件、日历、任务和文档管理等功能。这篇教程将...

    Lotus Notes邮件开发

    标题:Lotus Notes邮件开发 描述与标签:Lotus Notes邮件开发 知识点: 1. Lotus Notes简介: Lotus Notes是一款由...开发者需要熟悉Lotus Notes的DOMINO API和Java编程语言,才能有效实现邮件自动化处理的需求。

    JAVA调用IBM Notes的工具包

    JAVA调用IBM Notes的工具包,基本可以实现在java中操作Notes,适用的Notes版本为9.0,其它版本暂时未知,有兴趣的可以测试一下

    一个基于Lotus +JavaScript 实现的客户端邮件发送程序例子

    标题"一个基于Lotus +JavaScript 实现的客户端邮件发送程序例子"表明我们将探讨如何利用JavaScript语言来构建一个功能,使用户能够在客户端直接发送邮件,而无需通过Web服务器或其他中间件。这种技术可以提高用户...

    lotus notes 开发经验大汇总

    Lotus Notes是一款强大的企业级协同应用软件,由IBM公司开发,主要用于电子邮件、日历管理、任务安排、文档共享以及复杂的业务应用开发。本压缩包文件是资深Lotus Notes开发者的经验结晶,涵盖了他在长期开发过程中...

    Lotus Notes/Domino jar包

    在Java编程环境中,开发者可以通过使用Lotus Notes/Domino的jar包来与Notes服务器进行交互,实现各种功能。 标题中的"Lotus Notes/Domino jar包"指的是IBM提供的Java类库,这些库包含了用于访问和操作Notes和Domino...

    Lotus Notes的C/S结构的工作流模板

    5. **数据库脚本**:Lotus Notes使用LotusScript或Java进行编程,这些脚本可以嵌入到表单、视图或代理中,实现更复杂的工作流逻辑。在模板中,开发者可能需要了解如何编写和调用这些脚本来控制工作流的运行。 6. **...

    lotus domnio java代理传值

    在Lotus Domino开发环境中,Java代理是用于执行服务器端任务的重要工具,它们可以自动化许多功能,如处理数据、发送邮件等。"lotus domnio java代理传值"这个主题主要涉及如何在Java代码中创建和使用代理,并在代理...

    Lotus Notes开发指南

    ### Lotus Notes开发指南知识点解析 #### 一、编程概述 **6.1 在Domino中编程** - **公式**: 公式是一种具有编程语言特性的表达式,可以在其中赋值给变量并使用有限的控制逻辑。它通过调用@functions 和 @...

    Java和JavaScript在Lotus Domino_Notes5.0开发中的应用.pdf

    在Lotus Domino/Notes5.0中,Java和JavaScript可以相互配合使用,如使用Java开发服务器端的应用程序,而使用JavaScript实现客户端的交互程序。这样的组合可以使开发变得更加灵活和高效。 在开发过程中,需要注意...

    使用Java mail API访问Lotus Domino邮箱

    JNA库允许Java代码调用本地操作系统API,这对于与非标准的邮件服务器如Lotus Domino通信至关重要。 1. **配置依赖**: 添加以下Maven依赖到你的项目pom.xml文件中: - Java Mail API: ```xml &lt;groupId&gt;...

    lotus domino webservice建立和调用

    在本篇文章中,我们将深入探讨如何建立和调用Lotus Domino Web服务。 首先,建立Lotus Domino Web服务涉及以下几个关键步骤: 1. **设计Web服务接口**:你需要在Lotus Domino Designer中创建一个新的Notes Form...

    java_6_source.rar_LOTUS_telnet java_简单计算器java

    在Java中,通过使用Lotus Notes Java API,开发者可以创建和管理Lotus Domino的数据。这里的代码可能是用于建立一个Java客户端,使用telnet协议连接到Domino服务器,进行数据查询或者交互操作。TelnetApp.java可能...

    lotus domino java代理_获取传递值json

    Lotus Domino 是一种基于Notes技术的服务器端应用程序, Lotus Domino Java 代理是指在 Domino 服务器上运行的 Java 代理程序,可以用来处理用户请求、提供数据服务等。今天,我们将讨论如何在 Lotus Domino Java ...

    lotus数据用java程序导入导出实现数据移置的方案

    ### Lotus 数据用 Java 程序导入导出实现数据移置的方案 #### 概述 在企业级应用中,Lotus Notes 和 Domino 平台因其强大的文档管理和协作能力而被广泛采用。随着业务需求的变化和技术的发展,有时需要将存储在 ...

    Domino R8+版本编写及调用webservice样例库

    综上所述,"Domino R8+版本编写及调用webservice样例库"是一个关于如何在IBM Lotus Domino R8或其后续版本中创建和使用Web服务的教程或实践资源,涵盖了Web服务的创建、WSDL的使用、SOAP通信、调用服务的示例代码...

    Lotus NotesDomino 7 Web Services

    Lotus Notes/Domino 7 Web Services 是一种技术,允许开发者将 Lotus Domino 应用程序的功能暴露为可通过互联网访问的 Web 服务。Web 服务是一种基于标准的架构,使得应用程序能够跨平台交换数据和执行功能。在 ...

    Louts Notes集锦

    【标题】"Louts Notes集锦"所涵盖的知识点主要集中在Lotus Notes这一企业级协作软件上,特别是关于Java操作Domino API的实践与理论。Lotus Notes是IBM推出的一款强大的协同办公系统,它提供了电子邮件、日历、任务...

    notes API 8.5

    "Notes API 8.5" 是IBM Lotus Domino服务器和客户端应用程序开发的重要组成部分,它为开发者提供了与Lotus Notes和Domino系统交互的编程接口。这个API允许程序员通过编写代码来创建、读取、更新和删除Notes数据库中...

    Java访问Domino服务器[定义].pdf

    首先,要实现Java与Domino服务器的通信,需要使用Lotus Domino提供的Java API,即`lotus.domino`包。这个API允许开发者创建、读取、更新和删除Domino数据库中的文档和视图。在上述代码中,我们看到了`Domino`类是一...

Global site tag (gtag.js) - Google Analytics