Nginx代理smtp、pop等邮件服务

转载

http://blog.liuker.cn/index.php/nginx/35.html

环境需要:
1、需要一台nginx做mail的反向代理
2、需要一台做认证的php环境
3、一台测试客户机(测试邮件发送采用sendEmail)
整个流程:

客户机发邮件---->nginx---->认证---->发送邮件

 

一、部署nginx
这里基本就一笔带过了。最简单的编译参数即可。但需保证有--with-mail
 
1
2
3
4
5
wget http: //nginx .org /download/nginx-1 .0.4. tar .gz
tar  -zxf nginx-1.0.4. tar .gz
cd  nginx-1.0.4
. /configure  –prefix= /usr/local/nginx  –with-mail –without-http
make  &&  make  install

 

二、配置nginx
直接贴配置了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
user root;
worker_rlimit_nofile 65535;
worker_cpu_affinity 00000001 00000010 00000100 00001000;
worker_processes  4;
error_log   /var/log/nginx/error .log;
pid         /var/run/nginx .pid;
events {
     use   epoll;
     worker_connections  65535;
}
mail {
     server_name proxy. test .com;                 #本地监听域名
     auth_http  auth. test .com /auth .php;     #这个是需要的一个认证模块,可以在本地,也可以异地(注意配置hosts,或者域名)
     pop3_capabilities   "TOP"   "USER" ;
     imap_capabilities   "IMAP4rev1"   "UIDPLUS" ;
     
     server {
             listen     110;
             protocol   pop3;
             proxy      on;
     }
     server {
             listen     143;
             protocol   imap;
             proxy      on;
     }
     server {
         listen    25;
         protocol    smtp;
         proxy    on;
         smtp_auth login plain;
         xclient    off;
     }
}
 
三、配置认证模块
由于认证脚本是php的,所以需要php环境,准备php(略)可以使用nginx结合php,或者用apache结合php都行。
下面是php脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
if  (!isset( $_SERVER [ "HTTP_AUTH_USER" ] ) || !isset( $_SERVER [ "HTTP_AUTH_PASS" ] )){
   fail();
}
$username = $_SERVER [ "HTTP_AUTH_USER" ] ;
$userpass = $_SERVER [ "HTTP_AUTH_PASS" ] ;
$protocol = $_SERVER [ "HTTP_AUTH_PROTOCOL" ] ;
// default backend port
$backend_port =110;
if  ( $protocol == "imap" ) {
   $backend_port =143;
}
if  ( $protocol == "smtp" ) {
   $backend_port =25;
}
if ( $username  ==  $username ) {     //验证条件
         $server_ip  "10.10.10.1" ;    //这个是邮件服务器的ip
} else {
         exit ;
}
pass( $server_ip $backend_port );
//END
function  authuser( $user , $pass ){
   return  true;
}
function  fail(){
   header( "Auth-Status: Invalid login or password" );
   exit ;
}
function  pass( $server , $port ){
   header( "Auth-Status: OK" );
   header( "Auth-Server: $server" );
   header( "Auth-Port: $port" );
   exit ;
}
?>
四、测试发送
记得配置hosts
nginx代理服务器的ip    proxy.test.com
测试发送用的是sendEmail,安装略了。很简单
 
[root@DonTony ~]# /root/sendEmail -f [email protected] -t [email protected] -u "nginx proxy" -m "nginx proxy" -o message-charset=utf8 -s proxy.test.com -xu test -xp passwod
Jun 22 18:15:35 DonTony sendEmail[1840]: Email was sent successfully!
测试发送成功。
php也有访问成功的记录。
10.10.10.2 - - [22/Jun/2016:18:17:09 +0800] "GET /auth.php HTTP/1.0" 200 0 "-" "-" "-"
如果发现无法发送,查看代理上的error.log

转载于:https://www.cnblogs.com/wplong/p/7428373.html

你可能感兴趣的:(Nginx代理smtp、pop等邮件服务)