程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java+Nginx完成POP、IMAP、SMTP郵箱署理辦事

Java+Nginx完成POP、IMAP、SMTP郵箱署理辦事

編輯:關於JAVA

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設置裝備擺設停止測試

以上就是本文的全體內容,願望年夜家可以或許愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved