基本思路:在模块中配置好海信邮箱的域名、服务器IP和端口号。根据当前用户AD从系统配置库中获取到用户的邮箱地址,用户在KM系统中第一次(第一次操作之后,系统会保存一份文档,下次点击链接时直接登录)登录邮箱时,运行一个代理跳转到登录页面,在登录页面中选择好域名和登录语言,通过代理把“域名、服务器IP、端口号、用户邮箱、服务提供商(电信或网通)等参数传到servlet文件中,servlet文件根据coremail工程师提供的JAVA接口来写。代码如下:
iimport tebie.applib.api.APIContext; import tebie.applib.api.IClient; import java.net.Socket; import javax.servlet.*; import javax.servlet.http.*; //import java.lang.*; import java.util.*; import java.net.*; public class LoginCoreMail extends HttpServlet { String msg; String cookieValue = Long.toHexString(new Random().nextLong()); //随机生成一个数字字符串 public LoginCoreMail() { msg = null; } public String getLoginURL(String AddrIP,String ParremoteIP,String Parport,String Parlanguage,String Pardomain,String ParmailName,String ParwebService){ APIContext apic = null; IClient client = null; Socket socket; String mailsvrurl = null; try{ socket = new Socket(ParremoteIP, Integer.parseInt(Parport)); client = APIContext.getClient(socket); String UserName = ParmailName; String language = Parlanguage; String style = ParwebService; String IpCheck = ""; apic = client.userLoginEx(UserName, "language=" + language + "&style=" + style + "&remote_ip=" + AddrIP + "&ipcheck=" + IpCheck +"&cookiecheck=" + cookieValue); //通过coremail工程师提供的JAVA接口,获取到APIContext对象。 int retcode = apic.getRetCode(); if (retcode == 0) { String result = apic.getResult(); int sidBegin = result.indexOf("sid="); int webnameBegin = result.indexOf("webname="); // assert sidBegin != -1 && webnameBegin != -1; int sidEnd = result.indexOf('&', sidBegin); int webnameEnd = result.indexOf('&', webnameBegin); String sid = URLDecoder.decode((sidEnd != -1) ? result.substring(sidBegin+4 ,sidEnd) : result.substring (sidBegin+4)); //得到当前用户登录的session id String webname = URLDecoder.decode((webnameEnd != -1) ? result.substring(webnameBegin+8 , webnameEnd):result.substring(webnameBegin+8)); mailsvrurl = webname + "/coremail/fcg/ldapapp?funcid=main&sid=" + sid; } }catch (Exception e){ e.printStackTrace(); msg = e.getMessage(); }finally{ try{ client.close(); }catch(Exception e){ e.printStackTrace(); } } return mailsvrurl; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //String mailUrl=request.getParameter("mailUrl"); //用户邮箱地址 String remoteIP=request.getParameter("IP"); //邮件服务器IP String port=request.getParameter("port"); //邮件服务器端口号 String language=request.getParameter("lan"); //登录语言 String domain=request.getParameter("do"); //域名 String mailName=request.getParameter("Name"); String webService=request.getParameter("web"); //电信或是网通提供商 ServletOutputStream servletoutputstream = response.getOutputStream(); Cookie cookie = new Cookie("Coremail", cookieValue); //根据cookieValue随机生成一个cookie值 cookie.setPath("/"); cookie.setDomain(domain); response.addCookie(cookie); String mailsvrurl = null; //String AddrIP = request.getRemoteAddr(); String AddrIP = ""; mailsvrurl = getLoginURL(AddrIP,remoteIP,port,language,domain,mailName,webService); //通过代理传过来的参数 if (mailsvrurl != null) response.sendRedirect(mailsvrurl); //成功登录海信邮箱 else servletoutputstream.println(msg); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { doGet(request, response); //通过dopost把附加在URL中的参数去掉,通过另外的流传递。 } }