当前位置: 首页 > news >正文

内网python smtplib用ssh隧道通过跳板机发邮件

Python 自带 smtplib 包可以发邮件,示例见 [1,2],在邮箱设置启用 IMAP/POP3 就能用。有些邮箱需要设置授权码,如新浪、163 邮箱,然后以授权码作为 smtplib 登录服务器的密码。邮箱端配置参考 [3,4]。

现在情况是:

  • 邮箱端已配置好,手提电脑(windows,连着学校的网)用 [2] 的代码测试,发送成功。
  • 学校服务器(ubuntu 16.04),图形界面中浏览器能上网,但 ping 不通外网,用 [2] 代码也发不了邮件。
  • 手提电脑可以用 ssh 连学校服务器。

一顿搜索后,怀疑是学校给服务器网络设置了一些规则,所以这么奇怪。但想在服务器用 python 发邮件,用以提醒程序跑完。受 [5] 启发,考虑通过 ssh 隧道,让服务器将手提电脑当跳板,发邮件出去。[6] 有图解 ssh 隧道的回答,很直观。思路是:

  • 手提电脑用 ssh 隧道做远程转发跳板,指定一个学校服务器的端口,从中接收服务器发过来的邮件,并转发去真正的 SMPT 服务器的对应端口;
  • 服务器在用 smtplib 发邮件时,当自己(127.0.0.1)是 SMTP 服务器,将邮件发去那个指定端口。

这样 ssh 隧道就可以移花接木,将此邮件先转发到手提电脑,再转发去真正的 SMTP 服务器(如新浪邮箱的 smtp 服务器)。

下文分别给出服务器、手提电脑两端的代码、命令。假设指定转发新浪的端口为 2525、转发 163 的是 2526。

on laptop

手提电脑用 ssh 隧道转运学校服务器发给自己的邮件:

  • 此处是 dos 命令
  • 假设已经配好手提电脑 ssh 免密登录学校服务器
  • -R:远端转发(remote forward),可同时转发多个端口
  • -N:只开隧道,不在学校服务器打开一个 shell
@echo off
@REM tunnel-email.bat@REM 登录学校服务器的信息(免密登录)
set USER=blyu
set IP=1.2.3.4@REM 真正的 SMTP 服务器和端口
set SMTP_SINA=smtp.sina.cn
set PORT_SINA=25
set SMTP_163=smtp.163.com
set PORT_163=25@REM 与学校服务器指定的端口
set PORT1=2525
set PORT2=2526echo [%date% %time%] Tunneling E-mail from %IP% ...@REM 同时转发两个端口
ssh -R 0.0.0.0:%PORT1%:%SMTP_SINA%:%PORT_SINA% ^-R 0.0.0.0:%PORT2%:%SMTP_163%:%PORT_163% ^%USER%@%IP% -N

on server

服务器上用 python 发邮件的程序如此写:

  • 先在手提电脑开好隧道,再在服务器发邮件
# send-email.py
from email.header import Header
from email.mime.text import MIMEText
from email.utils import formataddr
import smtplibdef send_email(subject, text, to_name_list, to_addr_list,server, from_name, from_addr, password, port=0, ssl=False
):"""从 [2] 抄来的代码"""assert isinstance(to_addr_list, (list, tuple)) and len(to_addr_list) > 0for i, t in enumerate(to_addr_list):assert isinstance(t, str) and '@' in t, "Invalid E-mail address: [{}] ``{}''".format(i + 1, t)msg = MIMEText(text, 'plain', 'utf-8')msg['From'] = formataddr((Header(from_name, 'utf-8').encode(), from_addr)) if from_name else from_addrto_list = [formataddr((Header(tn, 'utf-8').encode(), ta)) for tn, ta in zip(to_name_list, to_addr_list)]to_list.extend(to_addr_list[len(to_name_list):])msg['To'] = ",".join(to_list)msg['Subject'] = Header(subject, 'utf-8').encode()# with smtplib.SMTP(server, port) as server:if ssl:server = smtplib.SMTP_SSL(server, port)else:server = smtplib.SMTP(server, port)server.set_debuglevel(1)server.login(from_addr, password)server.sendmail(from_addr, to_addr_list, msg.as_string())server.quit()if "__main__" == __name__:send_email("试水", "试下内网服务器通过 ssh 隧道用手提电脑做跳板发邮件",["马超", "李信"], ["chao.ma@qq.com", "xin.li@outlook.com"],"127.0.0.1",    # 学校内网服务器假装自己是 SMTP 服务器"吕布", "bu.lyu@sina.cn", "this-is-password",2525            # 指定端口(新浪))

References

  1. SMTP发送邮件
  2. iTomxy/ml-template/scripts/mail.py
  3. 【Python】用Python发邮件
  4. Python实现SMTP协议发送邮件(网易、新浪、qq)
  5. python smtplib 使用代理发送邮件
  6. Can someone explain SSH tunnel in a simple way? -> A Visual Guide to SSH Tunnels: Local and Remote Port Forwarding
  7. 免费邮箱pop3和smtp服务器
  8. iTomxy/ml-template/scripts/tunnel.bat

相关文章:

内网python smtplib用ssh隧道通过跳板机发邮件

Python 自带 smtplib 包可以发邮件,示例见 [1,2],在邮箱设置启用 IMAP/POP3 就能用。有些邮箱需要设置授权码,如新浪、163 邮箱,然后以授权码作为 smtplib 登录服务器的密码。邮箱端配置参考 [3,4]。 现在情况是: 邮…...

基于C#开发游戏辅助工具的Windows底层相关方法详解

开发游戏辅助工具通常需要深入了解Windows操作系统的底层机制,以及如何与游戏进程进行有效交互。本文将基于C#语言,从Windows底层方法的角度来详细讲解开发游戏辅助工具的相关技术和概念。 一、游戏辅助工具的基本概述 游戏辅助工具,通常被称…...

SSRF+Redis进行内网渗透

SSRFRedis进行内网渗透 一 环境搭建 准备一台服务器,开启了lampp以及redis,redis只允许内网访问 把上面这个注释放开后,redis就只能内网访问 启动redis 使用kali进行端口扫描,扫不到6379端口 kali连接不上redis ssrf漏洞代码 &…...

栈与队列-Java【力扣】【算法学习day.7】

前言 我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&#…...

最新版本!IntelliJ IDEA 2024.2.4 (Ultimate Edition) 的新特性

IntelliJ IDEA 2024.2版本(Ultimate Edition)的关键新特性包括: 改进的Spring Data JPA支持: 允许在IDE中直接运行Spring Data JPA方法,进行即时仓库查询验证。 无需运行应用程序或分析日志文件,即可查看…...

从头学PHP之运算符

关于运算符的图片均来自网络,主要是自己写太麻烦了,程序是个简化自己工作量的方式,能复制粘贴就不要手写了(建议初期还是多写写,加深下记忆)在这里我就偷个懒,图片涉及到侵权及时,请…...

使用 Git LFS(大文件存储)

Git LFS(Large File Storage)是一种扩展 Git 的工具,旨在更有效地管理大文件的版本控制。它通过将大文件的内容存储在 Git 之外来解决 Git 在处理大文件时的性能问题。 主要特点 替代存储:Git LFS 不直接将大文件存储在 Git 仓库…...

js 将一维数组转换成树形结构的方法

一维数组的数据结构,如下 const flatArray [ { id: 1, parent_id: null, name: ‘root1’ }, { id: 2, parent_id: null, name: ‘root2’ }, { id: 3, parent_id: 1, name: ‘child1’ }, { id: 4, parent_id: 2, name: ‘child2’ }, { id: 5, parent_id: 3, nam…...

HarmonyOS NEXT开发实战:实现高效下拉刷新与上拉加载组件(二)刷新核心逻辑与空页面集成

前言: 在上一篇文章中,我们深入探讨了如何在HarmonyOS中实现一个功能完备的空页面组件。现在,我们将进入下拉刷新和上拉加载功能的核心逻辑实现。这不仅仅是技术实现,更是对用户体验的深刻理解。本文将详细介绍如何将空页面与下拉刷新、上拉加载逻辑相结合,打造一个既高效…...

Crawler4j在多线程网页抓取中的应用

网页爬虫作为获取网络数据的重要工具,其效率和性能直接影响到数据获取的速度和质量。Crawler4j作为一个强大的Java库,专门用于网页爬取,提供了丰富的功能来帮助开发者高效地抓取网页内容。本文将探讨如何利用Crawler4j进行多线程网页抓取&…...

【无标题】Django转化为exe,app

目录 1. 将 Django 项目转换为 .exe 文件(Windows)2. 将 Django 项目转换为 .app 应用程序(macOS)3. 发布到微信公众号将一个 Django 项目转换为 .exe 文件或 .app 应用程序,并发布到微信公众号,实际上涉及多个步骤和技术。下面我将分别介绍这些过程。 1. 将 Django 项目…...

HTML5_标签_各类表格的实现

目录 1. 表格标签 1.1 表格的主要作用 1.2 表格的基本语法 1.3 表头单元格标签 1.4 表格属性 案例分析 先制作表格的结构. 后书写表格属性. 代码示例: 1.5 表格结构标签 1.6 合并单元格 合并单元格方式: 目标单元格:(写合并代码) 合并单元…...

C语言数据结构之单向链表(SingleList)

C语言数据结构之单向链表(SingleList) 自定义结构体数据类型SListNode表示单向链表的节点,成员包括一个无类型的data用来存贮数据和一个SListNode本身类型的指针next,指向下一个节点。围绕SListNode写一系列函数以slist_开头实现…...

【银河麒麟高级服务器操作系统实例】金融行业TCP连接数猛增场景的系统优化

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 服务器环境以及配置 物理机/虚拟机/云/容器 物理…...

详解Java的类文件结构(.class文件的结构)

this_class 指向常量池中索引为 2 的 CONSTANT_Class_info。super_class 指向常量池中索引为 3 的 CONSTANT_Class_info。由于没有接口,所以 interfaces 的信息为空。 对应 class 文件中的位置如下图所示。 06、字段表 一个类中定义的字段会被存储在字段表&#x…...

爆肝整理14天!AI工具宝藏合集

随着AI技术的飞速发展,各类AI工具如雨后春笋般涌现。经过对上百款AI工具的深入探索与测试,我精心挑选出了一些功能强大的AI神器,这些工具将极大地降低自媒体创作的门槛。 🚀无论是撰写文案、剪辑视频、设计图文,还是处…...

高效库存管理:金蝶云星空与管易云的盘亏单对接方案

高效库存管理:金蝶云星空与管易云的盘亏单对接方案 金蝶云星空与管易云的盘亏单对接方案 在企业日常运营中,库存管理是至关重要的一环。为了实现高效、准确的库存盘点和数据同步,我们采用了轻易云数据集成平台,将金蝶云星空的数据…...

小鹏汽车股价分析:看涨信号已出现,技术指标显示还有40%的上涨空间

猛兽财经核心观点: (1)小鹏汽车的股价过去几天有所回落。 (2)随着需求的上升,该公司的业务发展的还算不错。 (3)猛兽财经对小鹏汽车股价的技术分析:多头已经将目标指向15…...

c语言指针详解2

c语言指针详解2 1.数组名理解 数组名其实是地址,是数组首元素的地址(详解1有提及) 我们可以根据打印来确认 我们发现数组名和数组⾸元素的地址打印出的结果⼀模⼀样,数组名就是数组⾸元素(第⼀个元素)的地址。 但是上述结论有…...

Chrome DevTools 二: Performance 性能面板

Chrome DevTools 第二篇 Performance 主要介绍performance在我们日常开发中所起到的作用,以及如何利用performance 面板进行性能分析和相关优化建议。 性能面板 Performance 记录和分析页面运行中的所有活动,是解决前端性能问题的重要工具。 1. 控制栏…...

渠道推广如何识别与防止虚假流量?

在当今竞争激烈的游戏市场中,渠道推广作为游戏开发商拓展用户基础、提升市场渗透率的关键手段,其重要性不言而喻。然而,随着市场的发展,渠道作弊问题日益严重,虚假流量、刷假量、拉人风险和违规代充等行为频繁出现&…...

Keil C51 9.61__官网“最新版“下载、安装及相关提示( 保姆级教程, 安装过程详解, 附安装包 )

前言 Keil 5常用的分两个版本,C51 和 MDK。C51用于编译8051内核的单片机程序,譬如AT89C51、STC89C51、STC98C52等。MDK用于编译STM32、GD32等ARM32位内核单片机程序。 ‌Keil C51‌是由Keil Software Company开发的,专门用于8051微控制器的…...

二进制搭建 Kubernetes v1.20

k8s集群master01etcd集群节点1192.168.190.80 kube-apiserver kube-controller-manager kube-scheduler etcdk8s集群node01etcd集群节点2192.168.190.60kubelet kube-proxy docker etcdk8s集群node02etcd集群节点3192.168.190.70etcd VIP192.168.190.100 k8…...

我希望,你把篮球和鸡联系起来想一想。。。

“我希望,你把篮球和鸡联系起来想一想。” “篮球和鸡?” “我有一个好点子…” 目录 创建页面页面准备实现基础样式实现鸡的跑马灯 篮球弹跳实现篮球击出检查是否击中鸡并计算得分实现看一眼就爆炸效果 总结技术点完整代码 创建页面 页面准备 首先开始万恶的第一…...

STM32 ADC介绍

文章目录 STM32 ADC介绍一、ADC的基本概念二、STM32 ADC的主要特点高分辨率:多通道输入:多种工作模式:内置温度传感器和参考电压: 三、ADC的工作原理采样阶段:转换阶段:数据存储: 四、ADC的配置…...

JavaWeb合集12-Redis

十二、Redis 1、Redis 入门 Redis是一个基于内存的key-valule 结构数据库。 特点:基于内存存储,读写性能高 场景:适合存储热点数据(热点商品、资讯、新闻) Redis安装包分为Windows版和Linux版: Windows版 下载地址: https://gith…...

【C++】在Windows中使用Boost库——实现TCP、UDP通信

目录 一、编译Boost库 二、TCP服务端 三、TCP客户端 四、UDP连接 一、编译Boost库 1. 先去官网下载Boost库源码 2. 点击下载最新的版本 下载Windows环境的压缩包,然后解压 3. 在解压后的目录路径下找到“bootstrap.bat” 打开控制台,在“bootstrap.…...

怎么提取pdf的某一页?批量提取pdf的某一页的简单方法

怎么提取pdf的某一页?在日常工作与学习中,我们经常会遇到各式各样的PDF文件,它们以其良好的兼容性和稳定性,成为了信息传输和存储的首选格式。然而,在浩瀚的文档海洋中,有时某个PDF文件中的某一页内容尤为重…...

Github优质项目推荐(第八期)

文章目录 Github优质项目推荐 - 第八期一、【manim】,66.5k stars - 创建数学动画的 Python 框架二、【siyuan】,19.5k stars - 个人知识管理软件三、 【GetQzonehistory】,1.3k stars - 获取QQ空间发布的历史说说四、【SecLists】&#xff0…...

快读快写模板

原理 众所周知,在c中,用putchar和getchar输入输出字符的速度是很快的,因此,我们可以考虑把数字转化为字符,按位输出;把字符读入后转化为数字的每一位。 该快读快写可以实现对所有整数类型的输入。 templ…...

公众号做图网站/西地那非片能延时多久每次吃多少

输入brew services stop mysql 即可解决问题.重启mysql 执行语句 mysql.server start 如果用mysql.server stop 或者用kill 都是不能终止mysqld这个进程的。即使终止了,过一会就又会出现。...

网站建设 风险说明/百度最新人工智能

当下已有多家安卓手机企业降价抛售搭载骁龙8G1的手机了,原因是骁龙8G1的发热量太大了,而由台积电代工生产的骁龙8G1也快上市了,降价抛售骁龙8G1手机成为安卓手机企业无奈的选择。高通发布的骁龙8G1饱受发热诟病,在首款搭载这款芯片…...

惠阳区建设局网站/网站如何建立

近日,百度ting!正式发布了beta版Android手机客户端,凭借着百万级的正版资源,让用户每天都徜徉于海量音乐之海,感受音乐的有“声”力量。在功能、性能、服务及其他细节方面,百度ting!照样可圈可点,大有和知名…...

dw不用代码做网站/福建省人民政府

这条线:n int(n/2)…将n转换为一个float,将该float除以2,然后通过丢弃小数部分将其转换回int。在对于小于2**52的整数,转换为float是无损的,但是对于更大的整数,它必须舍入到最接近的53位数字,…...

b2b网站推广/谷歌在线浏览器免费入口

点击上方“iOS开发”,选择“置顶公众号” 关键时刻,第一时间送达! 科技公司纷纷投入原创节目制作,苹果杀出重围或许不是什么难事。 如今市场竞争越来越激烈,对于许多电视台来说,能够吸引到观众观看的就是独…...

怎么网站/关键词优化推广

使用Visual Studio .NET 2003的问题 尝试创建Web项目或打开位于URL "" 的Web项目时,Web服务器报告了以下错误。“HTTP/1.1 500 Internal Server Error” 原因:ASP.NET帐号对网站根目录没有访问权限。 解决方法:在根目录文件夹的安全…...