Java+Nginx实现POP、IMAP、SMTP邮箱代理服务
2015-07-21 16:25
1306 查看
Java+Nginx实现POP、IMAP、SMTP邮箱代理服务
我们上一篇介绍了Python+Nginx实现POP、IMAP、SMTP邮箱代理服务,而今天我们就介绍Java+Nginx实现POP、IMAP、SMTP邮箱代理服务,我们本次使用的环境为Centos7下,java程序我们通过eclipse导出的war包运行在linux下的tomcat下执行的,具体见下:
环境介绍:
Hostname:java.iternalsoft.com
IP:192.168.2.163
Roles: Proxy Server
OS:Centos7
我们通过以下命令来修改新安装的服务器信息:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/9ea62e10aeb1f2377b1560582d739c4f.jpg)
repo仓库安装好后,我们就开始安装nginx了
![](http://s3.51cto.com/wyfs02/M02/6F/F2/wKiom1WuAcLRDWp3AABI6xKie2I989.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/bf9f8b6739e3320cfca68734364ad851.jpg)
接下来查看安装默认路径
![](http://s3.51cto.com/wyfs02/M01/6F/F2/wKiom1WuAcLhDTDcAAEY_zsdQ1Y876.jpg)
接下来我们要配置nginx的配置文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/33e552a8ddc82196af82e86ec8fefce3.jpg)
我们为了方便需要将该配置文件内的内容全部清空,使用以下命令来完成
![](http://s3.51cto.com/wyfs02/M00/6F/F2/wKiom1WuAcLzeBeuAABxqfYsRIQ726.jpg)
然后再运行
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/ab963ef9638053a08362bbd25bc7a2eb.jpg)
![](http://s3.51cto.com/wyfs02/M02/6F/EF/wKioL1WuA6WSg4H2AACYVfb2i3U026.jpg)
然后再次编辑该配置文件
![](http://s3.51cto.com/wyfs02/M00/6F/EF/wKioL1WuA6XhRWG9AAEgsGtA3ak949.jpg)
接下来设置nginx服务
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/86eafed30931ad0fa4add6fcb0b9f1a5.jpg)
接下来就是安装java运行环境了(JDK),java运行环境,在此安装tomcat
首先确认的是linux一般都是自带java环境的JDK
![](http://s3.51cto.com/wyfs02/M02/6F/EF/wKioL1WuA6mQO8zeAACVgSR8Hb8906.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/3acd1442da809fbd1a999ee7a13b3148.jpg)
接下来就是准备安装新的jdk文件,首先呢我们运行一下命令
查看系统的版本及位数是32还是64位
如果有x86_64的是64位操作系统,如果没有那就是32位的
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/3ae4119bdab21ba4af1f43c6bc504fd7.jpg)
下载安装jdk
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
![](http://s3.51cto.com/wyfs02/M02/6F/EF/wKioL1WuA6yASz6hAAHbfVAZXGI448.jpg)
下载后,我们就可以开始解压了
![](http://s3.51cto.com/wyfs02/M02/6F/EF/wKioL1WuA8vT0X43AAEyuUBmIrQ247.jpg)
解压完成
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/ce3d55b1056c8e43a108200377547f57.jpg)
我们需要将apache-tomcat文件移动到 /usr/即上
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/9be97a53e81525e21abdfed53f8bbe95.jpg)
接下来启动tomcat服务
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/e71547946fec54772a9e8d40af2b3041.jpg)
然后我们查看tomcat相关服务端口
![](http://s3.51cto.com/wyfs02/M02/6F/F3/wKiom1WuAemxmKTFAABkP931R9o309.jpg)
Centos7下需要单独安装net-tools 服务
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/709f33bc6ae236d0b1b7dc86e76a63ae.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/1db597f75c1437fb49f981160386b67a.jpg)
然后我们使用ie浏览器进行访问
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/eed8ca07c60db75d476f50cfc7d24b13.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/4987b7c0af9331491636a2d36b2eafeb.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/988d1512843e9d4b06c880c955c36ac1.jpg)
定义好程序后,我们就将程序的代码导出为.war包,然后通过winscp或者mount的方式拷贝到tomcat的安装目录下的webapp下,启动tomcat服务器系统会自动将war包解压
![](http://s3.51cto.com/wyfs02/M02/6F/EF/wKioL1WuA82hQzV-AADs5i4uMBI241.jpg)
Tomcat服务启动后,我们通过浏览器访问,提示500页面,其实500的页面是正常的,因为我们在程序中是post请求传输,所以是无法打开页面的,
![](http://s3.51cto.com/wyfs02/M00/6F/EF/wKioL1WuA9CDb71gAAFKz8EvV2A105.jpg)
接下来我们我了方便测试代码是否有问题,我们就通过以下命令来测试一下:
我们上一篇介绍了Python+Nginx实现POP、IMAP、SMTP邮箱代理服务,而今天我们就介绍Java+Nginx实现POP、IMAP、SMTP邮箱代理服务,我们本次使用的环境为Centos7下,java程序我们通过eclipse导出的war包运行在linux下的tomcat下执行的,具体见下:
环境介绍:
Hostname:java.iternalsoft.com
IP:192.168.2.163
Roles: Proxy Server
OS:Centos7
我们通过以下命令来修改新安装的服务器信息:
Hostnamectl set-hostname customname 修改计算机名 Systemctl stop firewalld.serice 停止防火墙服务 Systemctl disable firewall.service 禁止防火墙服务随机启动 Systemctl stop postfix 停止postfix服务 Systemctl disable postfix 禁用postfix服务随机启动 Vim /etc/selinux/config 修改selinux的状态为disabled我们首先是安装Nginx服务,在安装Nginx前我们需要安装Nginx的仓库
Yum install http://nginx.org/packages/centos/7/noarch/RPMS/ nginx-release-centos-7-0.el7.ngx.noarch.rpm
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/9ea62e10aeb1f2377b1560582d739c4f.jpg)
repo仓库安装好后,我们就开始安装nginx了
Yum install nginx
![](http://s3.51cto.com/wyfs02/M02/6F/F2/wKiom1WuAcLRDWp3AABI6xKie2I989.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/bf9f8b6739e3320cfca68734364ad851.jpg)
接下来查看安装默认路径
/etc/nginx/nginx.conf Find -name nginx
![](http://s3.51cto.com/wyfs02/M01/6F/F2/wKiom1WuAcLhDTDcAAEY_zsdQ1Y876.jpg)
接下来我们要配置nginx的配置文件
Vim /etc/nginx/nginx.conf 默认配置文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/33e552a8ddc82196af82e86ec8fefce3.jpg)
我们为了方便需要将该配置文件内的内容全部清空,使用以下命令来完成
Echo >/etc/nginx/nginx.conf 清空nginx.conf内的内容但是我们为了配置完全,建议首先备份一下
Cp /etc/nginx/nginx.conf /etc/nginx/cginx.conf.bak
![](http://s3.51cto.com/wyfs02/M00/6F/F2/wKiom1WuAcLzeBeuAABxqfYsRIQ726.jpg)
然后再运行
echo > /etc/nginx/nginx.conf 清空配置文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/ab963ef9638053a08362bbd25bc7a2eb.jpg)
![](http://s3.51cto.com/wyfs02/M02/6F/EF/wKioL1WuA6WSg4H2AACYVfb2i3U026.jpg)
然后再次编辑该配置文件
Vim /etc/nginx/nginx.conf添加以下代码,然后根据自己的环境修改代码内容保存即可
user nginx; worker_processes 4; pid /var/run/nginx.pid; events { worker_connections 1024; } error_log /var/log/nginx/error.log info; mail { server_name java.abc.com; auth_http http://localhost:8080/imail/index.jsp; imap_capabilities IMAP4rev1 UIDPLUS IDLE LITERAL+ QUOTA; pop3_auth plain apop cram-md5; pop3_capabilities LAST TOP USER PIPELINING UIDL; smtp_auth login plain cram-md5; smtp_capabilities "SIZE 10485760" ENHANCEDSTATUSCODES 8BITMIME DSN; xclient off; server { listen 110; protocol pop3; proxy on; proxy_pass_error_message on; } server { listen 143; protocol imap; proxy on; } server { listen 25; protocol smtp; proxy on; } }粘贴保存
![](http://s3.51cto.com/wyfs02/M00/6F/EF/wKioL1WuA6XhRWG9AAEgsGtA3ak949.jpg)
接下来设置nginx服务
Systemctl enable nginx.service nginx服务开启随机启动 Systemctl start nginx.service nginx服务启动 Systemctl status nginx.service nginx服务运行状态
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/86eafed30931ad0fa4add6fcb0b9f1a5.jpg)
接下来就是安装java运行环境了(JDK),java运行环境,在此安装tomcat
首先确认的是linux一般都是自带java环境的JDK
![](http://s3.51cto.com/wyfs02/M02/6F/EF/wKioL1WuA6mQO8zeAACVgSR8Hb8906.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/3acd1442da809fbd1a999ee7a13b3148.jpg)
接下来就是准备安装新的jdk文件,首先呢我们运行一下命令
uname -a
查看系统的版本及位数是32还是64位
如果有x86_64的是64位操作系统,如果没有那就是32位的
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/3ae4119bdab21ba4af1f43c6bc504fd7.jpg)
下载安装jdk
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
![](http://s3.51cto.com/wyfs02/M02/6F/EF/wKioL1WuA6yASz6hAAHbfVAZXGI448.jpg)
Wget http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz?AuthParam=1433902875_8682334a55c7231fd0cb3cdbc5c9dcc9[/code] href="http://s3.51cto.com/wyfs02/M00/6F/F2/wKiom1WuAd7yIA3PAAB-VGEe7ik440.jpg" target=_blank>
我们通过ls查看下载的文件,然后我们需要解压
Tar -zxvf jdk1.8.0…….. ![]() 解压完成,无需安装 ![]() 然后我们通过cd命令进入该路径 在/usr/创建java的目录,然后将解压的jdk移动到该目录 Cd /usr/ 进入usr目录 ![]() Mkdir java 创建java文件夹 ![]() 然后我们将当前目录的jdk1.8….解压文件移动到java目录下即可 Mv jdk1.8.xx /usr/java ![]() Vim /etc/profile 编辑环境变量 添加环境变量 JAVA_HOME=/usr/java/jdk1.8.0_45 JRE_HOME=/usr/java/jdk1.8.0_45/jre PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib export JAVA_HOME JRE_HOME PATH CLASSPATH ![]() 我们保存后退出,然后重启系统,发现jdk的版本已经是我们新安装的版本了 ![]() 接下来是我们需要安装tomcat了 首先是下载 http://tomcat.apache.org/download-80.cgi 我们通过打开tomcat官网找到合适的安装包后,右击复制下载链接,通过wget在线下载 wget http://apache.dataguru.cn/tomcat/tomcat-8/v8.0.23/bin/apache-tomcat-8.0.23.tar.gz[/code] href="http://s3.51cto.com/wyfs02/M02/6F/F2/wKiom1WuAejSANpnAABoJjKsH0M614.jpg" target=_blank> |
Tar -zxvf apache_tomcat1.8.-0 tar.gz
![](http://s3.51cto.com/wyfs02/M02/6F/EF/wKioL1WuA8vT0X43AAEyuUBmIrQ247.jpg)
解压完成
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/ce3d55b1056c8e43a108200377547f57.jpg)
我们需要将apache-tomcat文件移动到 /usr/即上
Mv apache-tomcat /usr
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/9be97a53e81525e21abdfed53f8bbe95.jpg)
接下来启动tomcat服务
Cd /usr/apache-tomcat18.0.23/bin ./startup.sh
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/e71547946fec54772a9e8d40af2b3041.jpg)
然后我们查看tomcat相关服务端口
Netstat -anlpt
![](http://s3.51cto.com/wyfs02/M02/6F/F3/wKiom1WuAemxmKTFAABkP931R9o309.jpg)
Centos7下需要单独安装net-tools 服务
Yum install -y net-tools
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/709f33bc6ae236d0b1b7dc86e76a63ae.jpg)
Netstat -anlpt
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/1db597f75c1437fb49f981160386b67a.jpg)
然后我们使用ie浏览器进行访问
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/eed8ca07c60db75d476f50cfc7d24b13.jpg)
我们也可以通过修改apache-tomcat默认的服务端口 在apache-tomcat/conf/server.xml下
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/4987b7c0af9331491636a2d36b2eafeb.jpg)
HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别(none,simple,strong) HashEnv.put(Context.SECURITY_PRINCIPAL, "cn="+username+",o=beyondsoft"); HashEnv.put(Context.SECURITY_PRINCIPAL, username); //AD的用户名 HashEnv.put(Context.SECURITY_CREDENTIALS, password); //AD的密码 HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); // HashEnv.put(com.sun.jndi.ldap.connect.timeout, 3000);//连接超时设置为3秒 HashEnv.put(Context.PROVIDER_URL, "ldap://"+host+":"+port);// 默认端口389 try { ctx = new InitialDirContext(HashEnv);// 初始化上下文 Attributes attrs = ctx.getAttributes("cn="+username+",o=beyondsoft" ); System.out.println("Mailserver: " + attrs.get("mailserver").get()); String attDomain=attrs.get("mail").get().toString(); String attServer=attCN.split(",")[0].split("=")[1]+"." + attDomain.substring(attDomain.indexOf("@")+1) ; System.out.println(Inet4Address.getByName(attServer).getHostAddress()); return attCN.split(",")[0].split("=")[1];然后我们需要定制java运行程序,其实就是.war包
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/988d1512843e9d4b06c880c955c36ac1.jpg)
定义好程序后,我们就将程序的代码导出为.war包,然后通过winscp或者mount的方式拷贝到tomcat的安装目录下的webapp下,启动tomcat服务器系统会自动将war包解压
![](http://s3.51cto.com/wyfs02/M02/6F/EF/wKioL1WuA82hQzV-AADs5i4uMBI241.jpg)
Tomcat服务启动后,我们通过浏览器访问,提示500页面,其实500的页面是正常的,因为我们在程序中是post请求传输,所以是无法打开页面的,
![](http://s3.51cto.com/wyfs02/M00/6F/EF/wKioL1WuA9CDb71gAAFKz8EvV2A105.jpg)
接下来我们我了方便测试代码是否有问题,我们就通过以下命令来测试一下:
curl -i -H 'Auth-User: iiosoft' -H 'Auth-Pass: 123' -H 'Auth-Protocol: pop3' http://localhost:8080/imail/Index.jsp[/code] href="http://s3.51cto.com/wyfs02/M02/6F/F3/wKiom1WuAe6h4o5pAAB6wJehncE075.jpg" target=_blank>
我们测试你可以正常返回Auth-sever,Auth-status,auth-ports,auth-user,auth-pass等信息,所以没有问题,我们这样可以通过telnet mailserver 110的方式进行测试验证,但是在验证 过程中发现无法验证,代码确实是没有问题的,那怎么会验证失败呢
我们经过查找资料确认,nginx需要通过ldap返回的是auth-server必须是服务器的ip地址,如果是服务器名称的话无法解析,那我们只能通过在代码中进行转化了,默认返回的是服务器名称HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别(none,simple,strong) HashEnv.put(Context.SECURITY_PRINCIPAL, "cn="+username+",o=beyondsoft"); HashEnv.put(Context.SECURITY_PRINCIPAL, username); //AD的用户名 HashEnv.put(Context.SECURITY_CREDENTIALS, password); //AD的密码 HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); // HashEnv.put(com.sun.jndi.ldap.connect.timeout, 3000);//连接超时设置为3秒 HashEnv.put(Context.PROVIDER_URL, "ldap://"+host+":"+port);// 默认端口389 try { ctx = new InitialDirContext(HashEnv);// 初始化上下文 Attributes attrs = ctx.getAttributes("cn="+username+",o=beyondsoft" ); System.out.println("Mailserver: " + attrs.get("mailserver").get()); System.out.println("Mailserver: " + attrs.get("mail").get()); String attDomain=attrs.get("mail").get().toString(); String attCN=attrs.get("mailserver").get().toString(); String attServer=attCN.split(",")[0].split("=")[1]+"." + attDomain.substring(attDomain.indexOf("@")+1) ; // System.out.println(Inet4Address.getByName(attServer).getHostAddress()); //return attCN.split(",")[0].split("=")[1]; return Inet4Address.getByName(attServer).getHostAddress().toString();
接下来我们通过修改代码来解决该问题:
怎么解决的呢,我们在初始化前,想到LDAP上取到用户的mailserver和mailaddress值,得到的格式为a1/server,user@domain.com,然后我们可以在左侧取a1,右侧取@之后的内容,然后再次拼接就是一个服务器地址。A1.domain.com;最后我们通过再用InetAddress.getByName 转换成ip 就ok了
转换成ip后,我们再次测试;
我们同样也通过outlook进行测试
测试成功后,我们通过在dns中添加一个解析指向192.168.2.163,然后我们通过域名再次测试
如果要让nginx代理smtp的话,我们需要编辑nginx.conf添加配置文件server { listen 25; protocol smtp; smtp_auth login plain; xclient off; }注:我们因为在Nginx下添加SMTP代理,所以我们添加SMTP的server区域
我们加上后重启发现提示nginx重启失败
我们想到提示端口已使用,想到系统自带的postfix是启动的Systemctl stop postfix Systemctl disable postfix然后我们就重启启动nginx
我们通过outlook配置进行测试
本文出自 “高文龙” 博客,请务必保留此出处http://gaowenlong.blog.51cto.com/451336/1676770
相关文章推荐
- nginx动静分离后个别静态文件代理至后端
- Nginx入门之两种handler函数的挂载方式
- PHP实现每隔1秒(一秒)输出一条信息:禁用PHP缓存和web服务器(兼容Nginx、Apache)缓存、浏览器缓存
- Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL
- HOWTO - Install Nginx + uWSGI + Django
- Nginx防盗链的3种方法
- Flask uwsgi nginx:504 Gateway Time out
- Linux(Ubuntu12.04)安装nginx
- nginx源码安装
- nginx依靠超时时间实现上游负载web服务器重启时不影响访问
- nginx压力测试及防止恶意压力测试的方法
- nginx压力测试及防止恶意压力测试的方法
- 在Nginx上部署ThinkPHP,解决Pathinfo问题
- 解决nginx不支持thinkphp中pathinfo的问题
- nginx中使用pfx格式的ssl证书
- Python+Nginx实现邮件POP、IMAP、SMTP代理配置介绍
- 【nginx】nginx介绍-集成lua
- 配置nginx、mysql、php-fpm的方法
- CentOS7.1下生产环境Keepalived+Nginx配置
- 【转】windows下nginx+mono+fastCGI部署asp.net网站