python写邮箱验证工具_Python编写的Linux邮件发送工具

2023-11-15

之前有用过Linux自带的mail工具来定时发送邮件,但是要装mailx还有配mail.rc,这还比较正常,关键是到了ubantu下这工具用起来真是操蛋,如果哪天其他的unix like操作系统也有需求,那就太麻烦了,所以我用自带的python2.6.6和自带的邮件相关的库写了个小工具,使用步骤如下:

一、申请一个163邮箱,作为发件箱。

不用qq邮箱是因为,qq邮箱的SMTP服务器需要独立的密码,比较麻烦一点。

二、创建如下脚本,改名为SendMail.py:

注意将以下脚本中的from_addr和password改为你自己的163邮箱和密码即可。

#!/usr/bin/python

# -*- coding: utf-8 -*-

from email.header import Header

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from email.mime.application import MIMEApplication

import os,sys

import smtplib

import getopt

#使用帮助

def usage():

print('''Usage:

SendMail.py [Options]

eg. SendMail.py -s "邮件标题" -c "邮件正文" -d "xxx@xxx.com,yyy@yyy.com" --content-file mail_content.txt --attach attachment.log

Options:

-h/--help 显示此帮助

-s 邮件标题,例如: -s "这里是邮件标题"

-c 邮件正文,例如: -c "这里是邮件正文"

-d 邮件接收地址,例如: -d "xxx@xxx.com,yyy@yyy.com"

--content-file 包含邮件正文的文件,例如: --content-file mail_content.txt

--attach 附件,可以是绝对或相对路径,例如: --attach attachment.log 或者 --attach /var/log/attachment.log

Ps:目前此脚本只支持一个附件,暂无发送多个附件的需求

''')

#参数解析

def argParse():

subject,content,destAddr,content_file,attachment=None,None,None,None,None

'''

如果参数很多,可以选择用argparse模块,argparse是更加完善、更加简单的参数解析工具,这里用getopt只是因为想试下getopt怎么用。

getopt(args, shortopts, longopts = [])

shortopts表示短项参数,longopts表示长项参数,前者使用'-'后者使用'--',需要后接具体参数的短项参数后需要加冒号':'标识,longopts则必须以=结尾,赋值时写不写等号无所谓因为默认是模糊匹配的。

getopt的返回值分两部分,第一部分是所有配置项和其值的list,类似[(opt1,val1),(opt2,val2),...],第二部分是未知的多余参数,我们只需要在第一部分的list取参数即可。

第二部分一般无需关注,因为我们会使用getopt.GetoptError直接过滤掉这些参数(即直接报option xxx not recognized)。

'''

try:

sopts, lopts = getopt.getopt(sys.argv[1:],"hs:c:d:",["help","content-file=","attach="])

except getopt.GetoptError as e:

print("GetoptError:")

print(e)

sys.exit(-1)

for opt,arg in sopts:

if opt == '-s':

subject=arg

elif opt == '-c':

content=arg

elif opt == '-d':

destAddr=arg

elif opt == '--attach':

attachment=arg

elif opt == '--content-file':

content_file=arg

elif opt == '--attach':

attachment=arg

else:

usage()

sys.exit(-1)

#subject,destAddr必须不能为空

if not subject or not destAddr:

usage()

print("Error: subject and destination must not be null!")

sys.exit(-1)

#处理正文文件,如果存在正文文件,那么忽略-c参数,以文件内容为邮件正文

if content_file and os.path.exists(content_file):

try:

with open(content_file) as f1:

content=f1.read()

except:

print("Can't open or read the content file!")

exit(-1)

else:

pass

return {'s':subject,'c':content,'d':destAddr,'a':attachment,}

#发送邮件

def main():

opts=argParse()

subject,content,dest,attach=opts['s'],opts['c'],opts['d'],opts['a']

#通用第三方smtp服务器账号密码

smtp_server = 'smtp.163.com'

from_addr = '你的163发件箱'

password = '你的163发件箱密码'

to_addr = list(dest.split(","))

msg = MIMEMultipart()

msg['From'] = from_addr

msg['To'] = ','.join(to_addr)

msg['Subject'] = subject

msg.attach(MIMEText(content, 'plain', 'utf-8'))

#处理附件

if attach and os.path.exists(attach):

try:

with open(attach) as f2:

mime=f2.read()

#目前懒的再写多个附件了,因此只支持一个附件

attach1=MIMEApplication(mime)

attach1.add_header('Content-Disposition','attachment',filename=attach)

msg.attach(attach1)

except:

print("Can't open or read the attach file!")

exit(-1)

else:

pass

server = smtplib.SMTP_SSL(smtp_server, 465) #如果使用的25端口的非加密通道,那么使用SMTP方法替换SMTP_SSL

server.set_debuglevel(1)

server.login(from_addr, password)

server.sendmail(from_addr, to_addr, msg.as_string())

server.quit()

if __name__=='__main__':

main()

三、更改权限后就可以在安装了python的服务器上发送邮件啦(一般服务器都自带python2版本)。

例如:

[root@python leo]# chmod 755 SendMail.py

[root@python leo]# ./SendMail.py -s "邮件标题" -c "邮件正文" -d "xxx@qq.com" --content-file mail.txt

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python写邮箱验证工具_Python编写的Linux邮件发送工具 的相关文章

  • 解决goland代码全部莫名报错 找不到依赖的问题

    我遇到的问题是 代码在一台电脑上完全能够运行 切到另一台电脑 git pull之后 代码依旧能运行 但goland识别到依赖全部报错 找不到各种依赖 go mod download未能解决问题 因为代码能跑 说明第三方包都安装了 解决方案
  • matlab实现RCNN(二)

    本文在MatlabR2016b上使用自带的深度学习工具实现RCNN来进行车辆检测 实验环境 训练图片数量 825 网上收集 部分公共数据集 图片车辆数量 2300 对每张图片手工标注label得到 实验环境 MatlabR2016b 自带深
  • Matlab实现自适应动态规划多层神经网络的算例汇总

    使用MATLAB实现自适应动态规划 ADP 多层神经网络的算例 包括扭摆系统 仿射非线性算例以及 质量 弹簧 阻尼 系统 扭摆系统 torsional pendulum system 文献出处 1 Liu D Wei Q Policy It
  • 大数据模型部署思路

    提出问题 以神经网络为例 MATLAB可以用训练集来训练数据 随后用测试集来检测模型准确度 最后用该模型来决策新数据 在大数据平台下如何训练数据呢 又如何用训练好的模型对新数据进行决策呢 方法1 spark自带机器学习库mlib 用原生机器
  • bootstrap-table按住Shift多选设计思路-优化

    在网上找到bootstra table按住shift实现多选的思路后 进行改进 实现批量选中 批量取消选中 批量选中后取消部分选中并保留剩下选中项 向上 向下批量操作 参考地址 https blog csdn net qq 36360308
  • 计算机二级Java(第一份)

    1 1 第三范式是在第二范式的基础上消除了 非主属性对键的传递函数依赖 第三范式是为了消除数据库中关键字之间的依赖关系 2 冯诺依曼 输入 存储 运算 控制 输出 3 一般情况下 划分计算机四个发展阶段的主要依据是 计算机所采用的基本元器件
  • PPTP协议简述

    http jiaoyu 3158 cn 20121128 n4230270592726 html PPTP Point to Point Tunnel Protocol 点对点隧道协议 是建立在PPP Point to Point 点对点协
  • c#泛型

    参考博文 http www cnblogs com 1175429393wljblog p 5519701 html 泛型类型参数 其是一个占位符 不是一个真正的类型 而更像是一个类型的蓝图 当我们在声明 实例化该类型的变量时 则把T改为指
  • c#中字符串编码方式的转换,附带程序uft8到gb2312的互换

    前面做一个基于sybase的mis系统 由于sybase的后台是cp850编码 而 net平台不支持cp850编码 所以在程序中所有从数据库读出的中文都显示为 于是考虑在 net 平台中转换字符编码 于是查看了 net中字符编码的类Syst
  • error C4996: ‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead.

    Hello everyone 我是鲁班 一个热衷于科研和软开的胖子 出现这个错误时 是因为strcpy函数不安全造成的溢出 解决方法是 找到 项目属性 点击 C 里的 预处理器 对 预处理器 进行编辑 在里面加入一段代码 CRT SECUR
  • Error:Cannot build artifact xxx:war exploded' because it is included into a circular dependency

    Error Cannot build artifact xxx war exploded because it is included into a circular dependency 解决方案 IDEA 项目报错 Error Cann
  • python遍历目录压缩文件夹_干货

    如何遍历查找出某个文件夹内所有的子文件呢 并且找出某个后缀的所有文件 walk功能简介 os walk 方法可以用于在文件目录中进行查找和遍历操作 os walk 方法是一个简单易用的文件 目录遍历器 可以帮助我们高效的处理文件 目录方面的
  • 目标检测:Generalized Focal Loss(NIPS2020)

    Generalized Focal Loss Learning Qualified and Distributed Bounding Boxes for Dense Object Detection CCF A Xiang Li Wenha
  • Linux下查看tomcat占用端口

    1 先查看tomcat的进程号 ps ef grep tomcat 后面带 号 是为了查看多个tomcat进程 例如tomcat6 tomcat7 解释命令 ps 查看当前系统进程状态 可以搭配kill指令随时中断 删除不必要的程序 A 显
  • 高校俱乐部参会成员餐票领取安排及第二届研讨会邀请信

    尊敬的高校俱乐部合作伙伴 您好 感谢您参加移动开发者大会 今天下午电子门票已全部发出 请按照门票信息到国家会议中心签到处进行门票注册 北京周五和周六的天气温和 天气预报显示不会下雨 气温区间20 10摄氏度 需要一件外套 请在入场后到附件地
  • 《我的眼睛--图灵识别》附录

    我的眼睛 图灵识别 附录 1 远程代答 远程代答系统 答的是什么呢 答的便是出来以久的验证图形码 在互联网快速发展的时代 很多应用平台层出不穷 验证图形码的种类也从原来的简单清晰的数字变成了模糊的字母 甚至大小写字母数字组合 还有的是简单的
  • 素数环圈——回溯法

    任务描述 本关任务 把从 1 到 n 这 n 个数摆成一个环 要求相邻的两个数的和是一个素数 测试输入 20 预期输出 围成的圈是 1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 20 11 12 19 18 1 n
  • ubuntu 上装win xp

    如果ubuntu不想用 想换成win xp系统 但ubuntu并非卸就直接装xp了 开机后却无法正常进入xp系统 解决方法 1 先到网上下载MbrFix exe http www linuxidc com upload 2007 11 07
  • 你为什么没有男朋友

    一月 放寒假 买票回家 小A托老乡学长代买 请饭答谢 一来二去 学长遂成男友 一月 放寒假 你自己半夜去车站排队 然后 就没有然后了 二月 同学聚会 小B与当年暧昧的男同学的再续前缘 老同学遂成男友 二月 你在家帮你妈做卫生 然后 就没有然

随机推荐

  • Stream流的常用方法

    目录 一 遍历 1 属性遍历 2 对象遍历 3 遍历设值 二 过滤 1 简单过滤 2 多条件过滤 三 去重 四 统计 五 截取 六 跳过 七 排序 1 普通排序 2 指定排序 八 最值 1 集合确定不为空 2 集合可能为空 九 统计 十 L
  • 织梦DEDECMS EXCEL数据批量导入文章插件 支持自定义模型和字段 2021/09/13更新

    插件介绍 本插件为织梦EXCEL批量导入数据插件 支持tag导入 目前只有UTF版本 GBK版本自行转码 默认只支持普通文章模型 不包括自定义字段 需要另外模型或者添加新字段的可以联系客服收费修改 支持自定义字段和自定义模型 使用前 请先备
  • RabbitMQ交换机(扇出模式、直接模式)学习笔记

    视频地址 什么是交换机 RabbitMQ 消息传递模型的核心思想是 生产者生产的消息从不会直接发送到队列 实际上 通常生产 者甚至都不知道这些消息传递传递到了哪些队列中 情况实际上是这样的 生产者只能将消息发送到交换机 exchange 交
  • centos 安装opencv-python(及其安装错误解决方法)

    pip3 install opencv python 引入模块出错 ImportError libSM so 6 cannot open shared object file No such file or directory Import
  • css 实现背景图片拉伸

    使用css3 属性 background size background size cover 即可实现像桌面壁纸一样拉伸 以下是w3c上面的解释 语法 background size length percentage cover con
  • android反编译-修改别人apk(如何无视R文件,使用新增布局xml drawable等)

    前言 反编译是枯燥无味的 也是危险的 请务必避免包吃包住 17年写的有点乱已经重新排版 1 如果二次打包成APK给其他人使用 本文方案 2 如果只是自己使用或者有耐心的用户听你搞分身或者ROOT的 可以采用XPOSED方案 后续会补上XPO
  • 转:http协议学习系列(响应头---Response Headers)

    HTTP最常见的响应头如下所示 Allow 服务器支持哪些请求方法 如GET POST等 Content Encoding 文档的编码 Encode 方法 只有在解码之后才可以得到Content Type头指定的内容类型 利用gzip压缩文
  • Edge 浏览器『版本回退』和『关闭更新』

    前言 最近 Edge 浏览器又更新了 给整体浏览器页面布局进行大改动 之前苗条的标签页和收藏夹栏瞬间变得臃肿了 我实在无法忍受这种布局 所以我索性直接进行版本回退和设置永久关闭更新 详细步骤请看下文 Edge 浏览器版本回退官方文档 Mic
  • 刷脸支付全面爆发只是时间问题

    支付宝领先的微信支付是依附于电商的绝对优势 另一方面 微信支付凭借其10亿用户的优势 正在与支付宝抗衡 近几年来 移动支付的快速发展带动了支付技术的变革 nfc支付 二维码支付 指纹支付等支付方式活跃在我们的日常生活中 随着人脸识别技术的成
  • 【C++】反向迭代器精讲(以list为例)

    目录 二 全部代码 三 设计思路 1 讨论 2 关于迭代器文档一个小细节 结语 一 前言 如果有小伙伴还未学习普通迭代器 请参考这篇文章中的普通迭代器实现 STL list用法 试做 底层实现 花果山 程序猿的博客 CSDN博客 参考lis
  • 为什么会出现Date类型传到数据库后面的时分秒变为0?

    前言 今天写代码的时候遇到了一个问题 现在来和大家分享一下 创建时间 crea time在数据中是Datetime类型 但是当我在实体类上使用 Temporal 注解来给这个日期类型进行转换时 如果要是用 Temporal Temporal
  • sam文件学习1

    1 FLAG说明 Each bit in the FLAG field is defined as 0x0001 p the read is paired in sequencing 0x0002 P the read is mapped
  • 创建RAM程序,验证程序在DDR上的运行

    前面我们验证了程序运行在SRAM中 也就是程序运行在L2 cache中 但是对于启动操作系统 这并不够 操作系统要必须要足够大的RAM 所以我们必须要程序运行在RAM中 也就是DDR上 环境 CodeWarriorDevelopmentSt
  • jwt的token自动续约_JWT token过期自动续期解决方案

    access token 用于一般的资源请求的token refresh token access token过期后用于刷续期的token 注意设置refresh token的过期时间需比access token的过期时间长 问题场景与解决
  • 【OpenCV图像处理】1.11 形态学操作 - 开操作、闭操作、顶帽、黑帽

    形态学操作 开操作 闭操作 顶帽 黑帽 开操作 open 先腐蚀后膨胀 d s t o p
  • qml使用数组技巧

    在qml中 使用JS数组 修改里面的值 不发出change信号 my array n value 为了得到数组属性通知 你必须使用下面这个技巧 var tmp my array tmp n value 你可以做多个更改 也可以push sp
  • 设计模式:外观模式

    有些人可能炒过股票 但其实大部分人都不太懂 这种没有足够了解证券知识的情况下做股票是很容易亏钱的 刚开始炒股肯定都会想 如果有个懂行的帮帮手就好 其实基金就是个好帮手 支付宝里就有许多的基金 它将投资者分散的资金集中起来 交由专业的经理人进
  • Redis——认识Redis

    简单介绍 Redis诞生于2009年 全称是Remote Dictionary Server 远程词典服务器 是一个基于内存的键值型NoSQL数据库 特征 键值 Key value 型 value支持多种不同数据结构 功能丰富 单线程 每个
  • Qt简单的异步操作实现方法

    Qt简单的异步操作实现方法 在实际应用中 经常会遇到一些耗时操作 导致了主线程的阻塞 这时候可以使用异步操作来避免阻塞 Qt的异步操作需要使用下面的库 include
  • python写邮箱验证工具_Python编写的Linux邮件发送工具

    之前有用过Linux自带的mail工具来定时发送邮件 但是要装mailx还有配mail rc 这还比较正常 关键是到了ubantu下这工具用起来真是操蛋 如果哪天其他的unix like操作系统也有需求 那就太麻烦了 所以我用自带的pyth