美文网首页
Nginx代理smtp、pop等邮件服务

Nginx代理smtp、pop等邮件服务

作者: 贰爷 | 来源:发表于2020-07-20 17:55 被阅读0次

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

环境需要:

1、需要一台nginx做mail的反向代理

2、需要一台做认证的php环境

3、一台测试客户机(测试邮件发送采用sendEmail)

整个流程:

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

一、部署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`

二、配置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;`

`}`

`}`

三、配置认证模块

由于认证脚本是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``;`

`}`

`?>`

四、测试发送

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

测试发送成功。

[图片上传失败...(image-c25522-1595238808943)]

php也有访问成功的记录。

10.10.10.2 - - [22/Jun/2016:18:17:09 +0800] "GET /auth.php HTTP/1.0" 200 0 "-" "-" "-"

如果发现无法发送,查看代理上的error.log

https://blog.csdn.net/weixin_30703911/article/details/99319179?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-13-99319179.nonecase

相关文章

网友评论

      本文标题:Nginx代理smtp、pop等邮件服务

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