前几天突然发现社区中大量的注册用户并未完成邮件验证。盲猜应该又是mxroute又出问题了。
这家邮局之前也介绍过,但是有一个缺点就是 这家SMTP发信的地址不稳定,并且屏蔽了部分IP发信!
其实针对大多数境外的发信地址国内访问可能遇到访问不顺畅的情况!
本文主要介绍利用stunnel来正向代理这些海外邮局邮箱发信地址!
经过多次踩坑后写的本文,纯干货!谢谢好友VV佬的指导!
正向代理?
正向代理和反向代理,可以看看下图理解一下。
正向代理是一种代理服务器,位于客户端(如用户的电脑)和目标服务器之间。客户端通过正向代理向目标服务器发出请求,代理服务器会代表客户端去获取资源,并将响应返回给客户端。
反向代理是代理服务器位于目标服务器和客户端之间。客户端向目标服务器发送请求,但实际请求会被反向代理服务器接收并处理。反向代理服务器可以将请求转发到内部服务器,并将响应返回给客户端。
准备工作
1,海外服务器,且能访问要代理的发信网址
2,域名,如果你有IP证书也可。
3,SSL证书,自签证书也可,但是客户端须信任你的证书才行。推荐找免费证书使用。
部署过程
本文部署过程是ubuntu系统,其他操作系统请自行替换相应的命令。
安装
apt install -y stunnel
配置
编辑配置文件,使用下面的内容。
证书换成你自己的即可!
; /etc/stunnel/stunnel.conf
;foreground = yes
;debug = debug
syslog = no
output = /var/log/stunnel.log
pid =
setuid = stunnel4
setgid = stunnel4
; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
; OpenSSL Options
options = NO_COMPRESSION
options = NO_SSLv2
options = NO_SSLv3
options = NO_TLSv1
[mxroute_in_smtp]
cert = /usr/local/nginx/conf/ssl/server.crt
key = /usr/local/nginx/conf/ssl/server.key
accept = 0.0.0.0:521
connect = 127.0.0.1:10521
protocol = smtp
[mxroute_out_smtp]
client = yes
verify = 0
accept = 127.0.0.1:10521
connect = wednesday.mxrouting.net:587
protocol = smtp
启停
启动:
stunnel /etc/stunnel/stunnel.conf
停止:
killall stunnel
解析
可以将域名解析到服务器IP上。
如不想解析域名也可以在客户端上Hosts中指定域名解析的IP也可以!
测试
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
smtp_server = 'xxxx.com # 你的 stunnel 配置监听的域名
smtp_port = 521 # stunnel 监听的端口
sender_email = 'noreply@xxxx.cc' # 替换为发件人邮箱
password = 'xxxxxx' # 替换为发件人邮箱密码
receiver_email = 'xxxxx@163.com' # 替换为收件人邮箱
subject = '测试邮件'
body = '这是通过 SSL 发送的测试邮件。'
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain'))
try:
with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
server.login(sender_email, password) # 登录
server.sendmail(sender_email, receiver_email, msg.as_string()) # 发送邮件
print('邮件发送成功!')
except Exception as e:
print(f'邮件发送失败: {e}')
执行 python3 send.py 可以测试发信功能!
Systemctl
当然我们可以采用Systemctl配置服务启动!
新建service文件
vim /etc/systemd/system/stunnel.service
粘贴下面内容
[Unit]
Description=stunnel
After=network-online.target
[Service]
Type=simple
ExecStartPre=/usr/bin/chmod 600 /usr/local/nginx/conf/ssl/server.crt /usr/local/nginx/conf/ssl/server.key
ExecStart=/usr/bin/stunnel /etc/stunnel/stunnel.conf
RestartSec=3s
Restart=always
[Install]
WantedBy=multi-user.target
修改service文件权限
chmod 600 /etc/systemd/system/stunnel.service
## 重新加载Systemctl
systemctl daemon-reload
## stunnel开机启动
systemctl enable stunnel.service
## stunnel启动
systemctl start stunnel.service
## stunnel停止
systemctl start stunnel.service
主流邮局
这里分享一份支持正向代理境外主流邮局(Gmail,Outlook等)的配置文件。
需要的话可领取,理解这个原理,自己写也没啥难度了!
最后总结
1,一定要测试stunnel所在服务器能否正常访问邮局的发信地址,然后再折腾。
2,如果是自签证书一定要客户端信任证书才行。
3,本文需要有一定Shell操作的童鞋动手操作。
4,祝大家股市都赚钱!