Java+Nginx完成POP、IMAP、SMTP郵箱署理辦事。本站提示廣大學習愛好者:(Java+Nginx完成POP、IMAP、SMTP郵箱署理辦事)文章只能為提供參考,不一定能成為您想要的結果。以下是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,[email protected],然後我們可以在左邊取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設置裝備擺設停止測試
以上就是本文的全體內容,願望年夜家可以或許愛好。