Python 发送邮件脚本

作者:Jesse-csdn 来源: http://blog.csdn.net/l2show/article/details/57413359

在一些场景中经常需要发送邮件, 像是持续集成和运维报警等. 而使用Python脚本能够很快捷方便得实现发送各种邮件的需求.这里就通过Python基于SMTP(Simple Mail Transfer Protocol)实现一套可以群发,Html内容和附件的脚本.

既然是要发送各种类型的邮件, 首先需要有一个邮箱.这里就以腾讯企业邮箱为例.做完一下三个准备工作之后就可以开始写脚本了.

准备

  1. 在设置中开启所有SMTP相关服务.
  1. 记录发送邮件服务器地址, 连接方式和端口
  1. 新增一个授权密码并记录起来.

连接邮件服务器并登陆

Python中有smtplib模块可供使用, 将它导入进来. 在发送邮件服务器地址信息那里可以看到连接有两种方式, 一种是普通连接, 一种是经过加密的连接. 在脚本中就根据需求去构建两种不同的链接对象. 通过邮件服务器地址这里的server_host也就是smtp.exmail.qq.com和默认的服务器端口(SMTP方式默认使用25端口而SMTP_SSL就是默认使用465端口, 通常邮件服务器都是可以使用默认端口的)建立与邮件服务器之间的连接. 并通过邮箱账户和上面第三步中设置的授权密码登录邮箱服务器. 没有异常信息的话就连接邮件服务器并登录成功了.

发送文本邮件

发送邮件之前先验证一下当前是否已经登录到邮件服务器. 再通过email模块中的MIMEText构建出包含发件人, 收件人列表, 邮件标题和邮件内容的消息体.因为这里是发送文本内容的邮件, 所以content_type是plain.

构建完消息体之后就可以直接调用SMTP的sendmail方法, 将消息体从发件方发送到收件列表中的收件邮箱中去.

发送Html邮件

如果发送普通文本邮件成功了, 那么想要发送html内容的邮件就很简单了, 稍微改一下上面的代码给content_type多一种html的选择就可以了. 通过外部的参数控制构建消息体是纯文件内容还是html内容. 这样就可以使用一些html模板来发送固定格式的邮件.

发送附件

首先从email模块中引入MIMEMultipart. 从这个MIME扩展类的名字也可以看出它的作用是可以构建多个MIME的消息体, 并将它们装配起来.继续修改前面的代码. 根据发件人, 收件人列表和邮箱标题构建出多MIME实例.

接着根据参数决定构建纯文本还是Html内容的消息体, 将该包含邮件内容的消息体装载进上面初始化过的multi_msg中. 完成邮件内容部分的填充.

完成代码改造之后就要加入对附件的支持, 遍历外部传入的文件列表, 并根据文件构建出包含附件的消息体, 将其依次装载进multi_msg中.

打开遍历文件列表时拿到附件, 将其初始化为MIME消息体, 并且设置附件的文件属性和附件的名字.

汇总

功能代码完成之后再通过getopt构建出来外部参数指令, 方便外部调用脚本.

执行脚本

收到群发带附件的邮件

Issue

通常我们都是在公司使用自动发邮件脚本, 肯定都会发送一些内容到企业邮箱. 在向企业邮箱群发邮件的时候会出现企业退信的情况, 返回一个代码和简单的描述代表这次发送失败. 我在用163的邮箱给腾讯企业邮箱发送群发邮件时就出现过这个问题. 这时可以参考一下退信代码说明, 根据里面的说明fix问题.

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2017-04-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维

关于too many files open的解决办法

当我们用一些大的测试程序时,有时可能会报错,too many files open之类的错误,系统默认的同时打开文件数是1024,可以用这个命令查看: #uli...

12220
来自专栏拂晓风起

Flash:彻底理解crossdomain.xml、跨swf调用。

20130
来自专栏程序猿

linux 系统留后门方法和清除日志

1. setuid #cp /bin/sh /tmp/.sh #chmod u+s /tmp/.sh 加上 suid 位到shell上,虽然很简单,但容易...

71850
来自专栏我的博客

SVN更新网站

安装SVN看这里:http://blog.phpfs.com/archives/1525.html svn checkout http://192.168.1....

33350
来自专栏云知识学习

kubectl配置单、多集群访问

您可以通过 Kubernetes 命令行工具 kubectl 从本地客户端机器连接到 TKE 集群。

70120
来自专栏生信宝典

原来你是这样的软连接

12130
来自专栏云计算教程系列

如何在CentOS 7上配置Apache内容缓存

缓存是一种通过允许更快访问的方式临时存储共同请求的内容来提高服务器性能的方法。通过减少一些资源密集型操作来加速处理和交付。

28400
来自专栏菩提树下的杨过

hadoop 2.6全分布安装

这一步完成后,最好重启一次系统,以便生效。然后可以用ping master(或slave01、slave02)试下,正常的话,应该能ping通

16310
来自专栏程序猿

linux 系统命令大全

系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # ...

48670
来自专栏编程坑太多

『高级篇』docker之kubernetes搭建集群添加认证授权(上)(38)

kubernetes的安装有几种方式,不管是kube-admin还是社区贡献的部署方案都离不开这几种方式:

13140

扫码关注云+社区

领取腾讯云代金券