一、前言背景
前几天学习了smtplib和email模块,Get了新技能——如何用Python发送电子邮件,还能发送超文本、图片以及附件。
简直太赞了!
同时也写了一篇总结文章【Python军火库】smtplib+email:一起来用Python发送电子邮件吧!
欢迎跳转收看。
在写关于smtplib和email的总结文章的时候,我突发奇想,感觉每次写个发送电子邮件的代码要导入这么多模块,还得构造这么些对象,也挺麻烦的。
要是在smtplib和email基础上,自己写个新的模块,通过简单的方法完成登录三方SMTP服务器,构造正文、图片、附件对象以及发送邮件功能,那就方便多了。
而且新的模块还能直接提供给别人安装使用。
那简直太棒了!
但是要是实现这个想法,对于目前还知识浅薄的我来说,还面临着两大难题:
- 如何写一个模块,能够供其他Python程序进行调用相关属性和方法
- 如何打包一个模块,能够在其他电脑上安装并使用
二、个人首秀模块
首先解决第一问题:
如何写一个模块,能够供其他Python程序进行调用相关属性和方法
虽然我隐约知道这件事应该需要用到类的知识,但是由于之前的学习中并没有过多接触和应用关于的类的知识,也趁着这次初步学习了下。
最终个人首秀模块Pyemail诞生了
下面简单介绍一下Pyemail
模块名:Pyemail
包含类:PyEmail()
实例化:mail = PyEmail('mixed')
。参数有:alternative,related,mixed(来自于email模块)
登录三方SMTP:mail.enter(mail_host=, port=, mail_user, mail_pass=)
- 第一参数是第三方SMTP地址
- 第二参数是对应端口
- 第三参数是邮箱账号
- 第四参数是授权码
发送邮件:mail.sendemail(sender=, receivers=)
- 第一参数是发送者邮箱地址(字符串格式)
- 第二参数是接收者邮箱地址(字符串的列表)
构造头部信息:mail.header_info(from_= ; to_= ; subject= )
- 第一参数是发件人(字符串格式)
- 第二参数是收件人(字符串格式)
- 第三参数是主题信息(字符串格式)
构造纯文本内容:mail.Text(text=)
- 唯一参数text,纯文本内容(字符串格式)
构造超文本内容:mail.Html(hype_text=)
- 唯一参数hype_text,超文本内容(字符串格式)
构造图片内容:mail.Image(pic_address=, pic_cid)
- 第一参数是图片地址(字符串格式)
- 第二参数是图片id(字符串格式),与超文本中cid保持一致
构造附件内容:mail.Enc(enc_address=. enc_name=)
- 第一参数是附件地址(字符串格式)
- 第二参数是附件名称(字符串格式),在邮件中显示的名称
以上就是整个Pyemail模块中拥有的所有内容。
三、如何打包模块
接下来解决第二个问题:
如何打包一个模块,能够在其他电脑上安装并使用
当然简单搜索下,CSDN上就有很多教程文章,在这里自己也进行复盘总结下。
第一步:创建setup.py
注意setup.py
文件要和包放在同一个文件夹
from distutils.core import setup
setup(
name='Pyemail', # 需要打包的名字
version='v1.0', # 版本
py_modules=['Pyemail'], # 需要打包的模块
author='nilvya', # 作者
author_email='[email protected]' # 作者邮箱
)
第二步:构建模块
打开命令提示符,cd命令进入到模块所在的文件夹,再执行
Python setup.py build
成功后就会发现该文件夹多了一个【build】文件夹
第三步:生成压缩包
同样在该文件夹下执行命令
Python setup.py sdist
OK!之后就可以通过我们基操的:pip install Pyemail
来安装模块了。
四、实际运用例子
用实际的代码来演示下
from Pyemail import PyEmail
# 实例化
mail = PyEmail('mixed')
# 登录QQ邮箱的SMTP服务器
mail_host = 'smtp.qq.com' # QQ邮箱SMTP服务器地址
mail_user = '[email protected]' # 邮箱账号
mail_pass = 'aaabbbbccc' # 邮箱授权码
mail.enter(mail_host, 587, mail_user, mail_pass)
# 构造邮件头部信息
mail.header_info('nilvya', 'ltxxx', '发送测试')
# 构造纯文本内容
mail.Text('这是一个来自Python的发送邮件测试')
# 构造超文本内容
html_text = """
<p>CSDN首页</p>
<p><a href="https://www.csdn.net/">欢迎进入CSDN</a></p>
<p>图片演示1:</p>
<p><img src="cid:image1"></p>
<p>图片演示2:</p>
<p><img src="cid:image2"></p>
"""
mail.Html(html_text)
# 构造图片内容
mail.Image('开启QQ邮箱的SMTP服务.png','image1')
mail.Image('随机截图.png','image2')
# 构造附件内容
mail.Enc('test.txt', '测试文本.txt')
# 发送邮件
sender = '[email protected]' # 发件人邮箱地址
receivers = ['*********@qq.com'] # 收件人邮箱地址
mail.sendemail(sender, receivers)
最后运行程序,窗口显示
自己的QQ邮箱中也会马上收到相应邮件。
大功告成!
(PS:关于Pyemail模块我也已经上传,有需要的伙伴可以下载)