Nginx代理smtp、pop等邮件服务

本文介绍如何使用Nginx进行邮件系统的反向代理配置,并通过PHP脚本实现认证过程。具体步骤包括Nginx的安装与配置、PHP认证模块的编写与测试等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载

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
<?php
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 test@test.com -t test1@test.com -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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值