关于Java程序调用Lotus Notes邮件服务发送邮件的实现(二实践)
在第一部分中已找到该问题的解决思路,该部分主要叙述思路3(通过远程连接Domino服务器发送邮件)的实现过程,该过程主要分为两部分:Domino配置和程序代码。
一、Domino配置
通过阅读IBM官网的Lotus 官方文档架构师的文章(Java对Domino 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); } } }