内网通过nginx代理发送邮件
·
背景
项目中只有一台服务器 A 能访问互联网, 服务器 B 只能访问内网。 先发送qq邮件程序部署在服务器 B。 A 上部署nginx。
步骤
1、 重新编译 nginx
nginx 需要支持 strean。 原来的nginx 需要重新编译替换。
查看原nginx 支持那些 module:
./nginx -V
结果:configure arguments: --with-http_ssl_module --with-mail --with-stream --with-mail_ssl_module --with-stream_ssl_module
下载nginx 源码,编译
./configure --with-http_ssl_module --with-mail --with-stream --with-mail_ssl_module --with-stream_ssl_module
然后
make
请勿 make install
编译后的 nginx 在 objs 目录中。 将该 nginx 替换 旧的 nginx。
重新启动nginx (一定要操作)
kill -15 nginx master pid 也可以停止nginx
./sbin/nginx -s quit
./sbin/nginx
2、 更改nginx 配置
nginx中,stream配置跟http的配置在同一级 !!!
# send mail
stream{
server {
listen 2250;
proxy_pass smtp.qq.com:25 ;
}
}
然后
./sbin/nginx -s reload
3、 python发送程序
send_mail.py
# coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time
from email.utils import formataddr
def send_mail(receivers, title, content ):
mail_host = "服务器A的内网ip"
sender_mail = "******@qq.com"
sender_pw = "QQ邮箱授权码"
message = MIMEText(content,'html','utf-8')
message['Subject'] = title
#message['From'] = Header("邮件来自", 'utf-8')
message['From'] = formataddr(["邮件来自", sender_mail])
message['To'] = Header("收件人", 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 2250)
smtpObj.ehlo()
smtpObj.login(sender_mail, sender_pw)
smtpObj.sendmail(sender_mail, receivers, message.as_string())
smtpObj.quit()
print('success')
except smtplib.SMTPException as e:
print('error',e) #打印错误
if __name__ == "__main__":
receivers = ["736*******@qq.com"]
title = "自动发送邮件-" + time.strftime("%F %T")
content = "测试 903 <br /> 测试2 904 <br />"
send_mail(receivers, title, content)
执行发送邮件:
python send_mail.py
更多推荐


所有评论(0)