Java+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

repo仓库安装好后,我们就开始安装nginx了

Yum install nginx

接下来查看安装默认路径

/etc/nginx/nginx.conf

Find -name nginx

接下来我们要配置nginx的配置文件

Vim /etc/nginx/nginx.conf 默认配置文件

我们为了方便需要将该配置文件内的内容全部清空,使用以下命令来完成

Echo >/etc/nginx/nginx.conf 清空nginx.conf内的内容

但是我们为了配置完全,建议首先备份一下

Cp /etc/nginx/nginx.conf /etc/nginx/cginx.conf.bak

然后再运行

echo > /etc/nginx/nginx.conf 清空配置文件

然后再次编辑该配置文件

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;

}

}

粘贴保存

接下来设置nginx服务

Systemctl enable nginx.service nginx服务开启随机启动

Systemctl start nginx.service nginx服务启动

Systemctl status nginx.service nginx服务运行状态

接下来就是安装java运行环境了(JDK),java运行环境,在此安装tomcat

首先确认的是linux一般都是自带java环境的JDK

接下来就是准备安装新的jdk文件,首先呢我们运行一下命令

uname -a

查看系统的版本及位数是32还是64位

如果有x86_64的是64位操作系统,如果没有那就是32位的

下载安装jdk

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Wget

http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz?AuthParam=1433902875_8682334a55c7231fd0cb3cdbc5c9dcc9

我们通过ls查看下载的文件,然后我们需要解压

Tar -zxvf jdk1.8.0……..

解压完成,无需安装

然后我们通过cd命令进入该路径

在/usr/创建java的目录,然后将解压的jdk移动到该目录

Cd /usr/ 进入usr目录

Mkdir java 创建java文件夹

然后我们将当前目录的jdk1.8….解压文件移动到java目录下即可
1
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

下载完成


下载后,我们就可以开始解压了
Tar -zxvf apache_tomcat1.8.-0 tar.gz

解压完成

我们需要将apache-tomcat文件移动到 /usr/即上

Mv apache-tomcat /usr

接下来启动tomcat服务

Cd /usr/apache-tomcat18.0.23/bin

./startup.sh

然后我们查看tomcat相关服务端口

Netstat -anlpt

Centos7下需要单独安装net-tools 服务

Yum install -y net-tools

Netstat -anlpt

然后我们使用ie浏览器进行访问

我们也可以通过修改apache-tomcat默认的服务端口

在apache-tomcat/conf/server.xml下

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包

定义好程序后,我们就将程序的代码导出为.war包,然后通过winscp或者mount的方式拷贝到tomcat的安装目录下的webapp下,启动tomcat服务器系统会自动将war包解压

Tomcat服务启动后,我们通过浏览器访问,提示500页面,其实500的页面是正常的,因为我们在程序中是post请求传输,所以是无法打开页面的,

接下来我们我了方便测试代码是否有问题,我们就通过以下命令来测试一下:
curl -i -H 'Auth-User: iiosoft' -H 'Auth-Pass: 123' -H 'Auth-Protocol: pop3'
http://localhost:8080/imail/Index.jsp

我们测试你可以正常返回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配置进行测试

以上就是本文的全部内容,希望大家能够喜欢。



相关阅读:
Win7使用还原功能找回丢失系统文件的方法
Js实现无刷新删除内容
Win10 TH2正式版秋季更新内容曝光 共有十八处改进
ECMAScript6块级作用域及新变量声明(let)
Win10准正式版10240出现UAC窗口提示问题
最简单的Oracle数据恢复 select as of使用方法
苹果Mac查看硬盘是否开启ACHI模式的方法图解
php实现数组筛选奇数和偶数示例
谈一谈js中的执行环境及作用域
使用getBoundingClientRect方法实现简洁的sticky组件的方法
asp.net 图标提取以及图标转换的实例代码
Android App开发中Gradle构建过程的配置方法
jQuery中阻止冒泡事件的方法介绍
HTML5几个设计和修改的页面范例分享
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 初一新生活作文300字 如何解析一道作文题 初中初三作文800字:友谊最重要(十五) 小学二年级作文300字:这个办法真好 走过心灵的雨季作文 经年风雨,依旧芳华 用心就能成功作文1400字 机关单位践行“三严三实”心得体会 小学六年级作文550字:分别的日子 皎洁的月光作文800字 如何提高小学数学课堂效果 缅怀国父?振兴中华作文1600字 酸醋浴作文400字 主题班会:换位思考,律己宽人 说分手 《雪孩子》教学实录 大四毕业的学生求职信范文 平安夜,不平静的心 在秋季监狱田径运动会上的开幕词 爱,无处不在作文600字 给你一巴掌、再给你揉揉、这就是人心作文900字 计算机信息管理学生的实习总结 那一刻、她心动了 击剑作文300字 最新临床医学实习报告范文 我们如何与这个世界相处?《皮囊》读后感 听雨·悟禅 羊的醒悟(3)作文700字 办公室文员实习报告3000字 致我亲爱的猪猪 XX市在全省老干部宣传思想工作会议上的讲话 六一儿童节500字 80后藏族军人的军旅情怀,彰显军人本色 观看潮剧作文600字 2014年基层干部个人述职报告 幼儿园2015年三八妇女节庆祝活动总结 第六章 依格尔大神殿 若有如果作文600字 春天的预兆 心花蔓蔓开岗上 诗经爱情名句点评,《诗经》中描写的爱情,感情真挚自然,质朴纯真健康的爱情观! 感悟人生的经典文章 心里永远的水果糖作文300字 描写西湖的诗句 高中高三作文1500字:美丽的微山湖 人生中多彩的如果 放走的鲑鱼读后感300字 触及我心灵深处的怀抱作文 2015年春季期学校工作督查情况通报 教育故事:一个农夫进城卖驴和山羊

Copyright © 2016 phpStudy |