Quantcast
Channel: 如有乐享
Viewing all articles
Browse latest Browse all 41

利用stunnel代理加速海外邮箱SMTP/IMAP发信地址

$
0
0

前几天突然发现社区中大量的注册用户并未完成邮件验证。盲猜应该又是mxroute又出问题了。

这家邮局之前也介绍过,但是有一个缺点就是 这家SMTP发信的地址不稳定,并且屏蔽了部分IP发信!

其实针对大多数境外的发信地址国内访问可能遇到访问不顺畅的情况!

本文主要介绍利用stunnel来正向代理这些海外邮局邮箱发信地址!

经过多次踩坑后写的本文,纯干货!谢谢好友VV佬的指导!

 

正向代理?

正向代理和反向代理,可以看看下图理解一下。

正向代理是一种代理服务器,位于客户端(如用户的电脑)和目标服务器之间。客户端通过正向代理向目标服务器发出请求,代理服务器会代表客户端去获取资源,并将响应返回给客户端。

反向代理是代理服务器位于目标服务器和客户端之间。客户端向目标服务器发送请求,但实际请求会被反向代理服务器接收并处理。反向代理服务器可以将请求转发到内部服务器,并将响应返回给客户端。

 

 

准备工作

1,海外服务器,且能访问要代理的发信网址

2,域名,如果你有IP证书也可。

3,SSL证书,自签证书也可,但是客户端须信任你的证书才行。推荐找免费证书使用。

为什么要SSL证书?由于某些原因,大部分国内Server不能直接使用境外Server透明代理,必须加密传输才行。

 

部署过程

本文部署过程是ubuntu系统,其他操作系统请自行替换相应的命令。

安装

apt install -y stunnel

 

配置

编辑配置文件,使用下面的内容。

证书换成你自己的即可!

这个配置很关键!问了多少遍GPT都没解决!!配置正向代理需要有IN和OUT一对才行!!
; /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,祝大家股市都赚钱!

 

 

 

 


Viewing all articles
Browse latest Browse all 41

Trending Articles