×
新网 > 邮箱资讯 > 正文

Java实现创建outlook邮箱账号

本文的先决条件:待创建的邮箱账号必须已经创建了AD账号,关于如何通过Java创建AD账号,请参考我写的另一篇博客现在我们开始。。。。。。话说从研究这个功能到实现它前后大致花了一周的时间,毕竟用Java实现这个不是一件简单的事情,谁让EXCHANGE和.NET更亲呢。一开始想了两个方案:交给.NET团队开发,最终包装个接口出来。服务器安装PowerShell on Linux,远程调用PowerSh

 

现在我们开始。。。。。。话说从研究这个功能到实现它前后大致花了一周的时间,毕竟用Java实现这个不是一件简单的事情,谁让EXCHANGE和.NET更亲呢。一开始想了两个方案:

 

交给.NET团队开发,最终包装个接口出来。服务器安装PowerShell on Linux,远程调用PowerShell操作EXCHANGE。第一个方案转瞬即逝,不要问我为什么!那就第二个方案呗,拉来运维团队的同学帮忙搞一下,结果centos6真心装不上,各种包不支持,还把测试服务器装挂了。得出的结论是只有centos7以上才能安装完美运行,算了,完美放弃。Linux不行,咱就放在windows服务器吧,毕竟PowerShell是微软亲儿子啊。于是就有了最终的解决方案:Java+SSH2+PowerShell,具体的想法是Java环境下通过SSH2连接上远程的windows服务器,进入特定目录下执行PowerShell脚本创建邮箱。

至于SSH2和PowerShell是啥,这里就不重复叙述了,感兴趣的同学可以百度了解下。

PowerShell学习资料地址:http://www.pstips.net/powershell-online-tutorials/

下面直接上步骤吧

1:SSH2连接远程服务器

这个很简单,下载freesshd软件,按照教程安装就行,安装完成之后使用putty工具连接测试。

 

freesshd下载地址:

http://www.freesshd.com/?ctt=download

freesshd安装参考百度经验的文章:

https://jingyan.baidu.com/article/f7ff0bfc1ebd322e27bb1344.html

putty安装地址:

https://pan.baidu.com/s/1dG1L1F7密码:gwou

 

putty测试连接成功后,可以编写Java代码连接了,该过程需要ganymed-ssh2-build210.jar的支持,所以需要添加maven坐标

 

<dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>262</version> </dependency>

连接代码案例

 

import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session;

 

/** * ssh登录远程服务器 * @return */ public boolean login(){ boolean result = false; try { conn = new Connection(ip,port); conn.connect();//连接 if(!conn.authenticateWithPassword(userName, userPwd)){ logger.error("通过SSH2登录OUTLOOK邮件服务器错误,验证失败"); conn.close(); return result; } result = true; } catch (IOException e) { logger.error("通过SSH2登录OUTLOOK邮件服务器异常",e); } return result; } /** * 退出远程服务器 * @return */ public void exitConnect(){ if(conn != null){ conn.close(); } }2:Powershell脚本编写与测试

这边提供一个get-mailbox方法的脚本getEmail.ps1,用于获取员工的邮箱信息

 

set-executionpolicy remotesigned $user = $args[0] $password = ConvertTo-SecureString -String $args[1] -AsPlainText -Force $credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $user,$password $session = New-PSSession -Authentication Kerberos -Credential $credential -ConfigurationName microsoft.exchange -ConnectionUri http://XXXXXXXX(你的邮件服务器)/powershell Import-PSSession $session get-mailbox $args[2]
$args[i]代表给PS脚本传递的参数,$args[0]是outlook管理员的用户名,$args[1]是管理员登录的密码,$args[2]是需要查询的AD账号。

测试案例:


测试结果:

接下来只要将PS脚本中的get-mailbox $args[2]方法替换成Enable-Mailbox $args[2] -Database $args[3]就行,$args[2]代表员工的AD账号,$args[3]代表员工的邮箱创建在哪个数据库中。

3:Java通过ssh2调用命令执行PowerShell脚本
获取远程连接的session,执行脚本方法。
方法传递两个参数,第一个参数是PowerShell脚本在windows服务器硬盘中的绝对路径,第二个参数是传递给PowerShell脚本的参数,格式为从前到后依次传递,例如"arg1 arg2 arg3 arg4"。

/** * 执行远程服务器上的PowerShell脚本 * @param powerShellFile powerShell的脚本文件 * @param powerShellParams powerShell的脚本文件的参数 * @return session对象,包含返回结果 */ public Session executePowerShell(String powerShellFile,String powerShellParams){ Session session = null; String command = "cmd /c C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe "+powerShellFile + " " + powerShellParams; try{ if(login()){ session = conn.openSession(); session.execCommand(command); } }catch (IOException e){ logger.error("执行远程服务器上的PowerShell脚本异常,脚本地址:"+powerShellFile,e); } return session; }

方法返回一个ch.ethz.ssh2.Session对象,我们可以从这个对象中获取执行命令返回的信息。

session = outLookOperationService.executePowerShell(powerShellFile,powerShellParams); //等待1分钟处理时间,1分钟后取值 Thread.sleep(60000); InputStream stdout = session.getStdout(); BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); StringBuilder sb = new StringBuilder(); //关闭远程连接 outLookOperationService.exitSession(session); session = null; while(true) { String line = br.readLine(); if(line == null){ break; } System.out.println(line); sb.append(line + "n"); }

获取到返回结果,就可以判断邮箱创建是否成功,以及做一些日志等功能了。
 
 
 

 

 

  • 相关专题

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:operations@xinnet.com进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

免费咨询获取折扣

Loading