美文网首页AI-大数据web
【NGINX入门】10.Nginx代理smtp、pop等邮件服务

【NGINX入门】10.Nginx代理smtp、pop等邮件服务

作者: 笔名辉哥 | 来源:发表于2021-02-03 06:57 被阅读0次

    1. 摘要

    本文讲解Nginx代理smtp、pop等邮件服务的配置和样例代码。

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

    2. 部署实践

    2.1 部署nginx

    这里基本就一笔带过了。最简单的编译参数即可。但需保证有--with-mail

    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
    

    2.2 配置nginx

    直接上配置。

    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;
        }
    }
    

    2.3 配置认证模块

    由于认证脚本是php的,所以需要php环境,准备php(略)可以使用nginx结合php,或者用apache结合php都行。

    下面是php脚本

    <?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;
    }
    ?>
    

    2.4 测试发送

    记得配置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

    3. 参考

    (1)Nginx代理smtp、pop等邮件服务https://www.cnblogs.com/wplong/p/7428373.html

    相关文章

      网友评论

        本文标题:【NGINX入门】10.Nginx代理smtp、pop等邮件服务

        本文链接:https://www.haomeiwen.com/subject/iggytltx.html