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 交通频道 作文范文 想找个女孩爱我 市交通局党组科学发展观分析检查报告 放假了,无聊了…… 经典语录:遇到了就该珍爱,错过了那就释怀 由蚊子叮咬所想到的 大地的话作文900字 经典唯美语录_超经典唯美语句 迷恋它——学乐中国 老磨 神奇种子--胖大海 小学五年级作文500字:“贵妃醉酒记” 2015护士职业生涯规划书 农业局落实全县经济工作会议精神情况汇报 “不善变”的日本人 中学暑假安全保证书 苏少版七年级美术教案第4课 又画又做又印 小学五年级作文600字:奇雨 无心处便是禅 假面乖?!作文450字 我的阶段爱情 矿山毕业实习报告 在校会上的演讲 暖洋洋的初春去拾梦 副处级领导干部三讲教育整改措施五 初三化学教师工作总结(2) 来华商务邀请函 奉送袁高使君诏征赴行在,效曹刘体 “吃货”梅花鹿作文900字 暑假里我学会了什么作文800字 小学五年级作文500字:假如我是上帝 爸爸的爱作文350字 此生,你不死,我不老 不一样的星星 雅加埂-红石-草原 体验生命的分秒作文1200字 北岛诗歌经典语录 我们的故事不会结束在这个夏天(一) 保持一颗平常心,缘分这种东西可遇不可求 让阳光洒遍每个角落 小宝宝百日宴主持词 股“神” 永远的快乐 失落的一角读后感100字 挽回童年的心作文500字 自己老是胡思乱想干嘛 微凉记忆 老鹰捉小鸡 肖家豪 有爱真好450字作文 青春倒计时 魔幻果之谜2作文600字

Copyright © 2016 phpStudy |