在小工具这个系列里记录一些我使用简易代码实现的一些小功能,方便自己在以后有需求的时候查看和调用,同时会讲解这些小功能实现实现过程,基础向,有需求或者感兴趣的朋友不妨上手试试。
涉及包及项目结构介绍
本次介绍的是使用python实现群发邮件的一个小功能,其中使用到的包及其功能如下:
- configparser:读取配置文件
- email:管理电子邮件消息
- smtplib:封装了smtp协议,用于发送电子邮件
- sys:提供对解释器使用或维护的一些变量的访问
为了方便对不同功能的更改,将不同的功能实现通过不同的模块来实现,不同的文件及其对应的功能如下:
- user.ini:存放发件人邮箱与授权码的配置文件
- customers.ini:存放收件人邮件列表的配置文件
- config.py:读取配置文件的模块
- message.py编写邮件内容的模块
- send.py:用于发送邮件的模块
邮箱SMTP服务设置
在使用python发送邮件时,首先需要中先使用开通自己邮箱里的SMTP服务,下面我们以QQ邮箱为例,简单介绍一下开启服务的方法.
1.首先进入QQ邮箱,打开设置界面;
2.切换到邮箱设置下的账号界面;
3.在以下的服务界面开启IMAP/SMTP服务,通过验证后你可以获得一个授权码,将其保存;
完成以上设置之后我们就可以开始着手构建群发邮件的python项目。
配置文件准备
在这个项目中使用配置文件来存放发件人和收件人的相关信息,分开存放这样的信息的有点在于可以使得程序更加灵活。可以直接用记事本或Notepad++对构建配置文件,在输入文件信息后在保存时将文件的后缀修改为ini就好
在本次项目中使用的两份项目文件,分别是:
- user.ini:存放发件人邮箱与授权码的配置文件
[get_user]
# 发件人邮箱与授权码
user_mail = xxxxxxxxx@qq.com
user_pwd = xxxxxxxxx
- customer.ini:用于存放收件人邮件列表的配置文件
[get_customers]
# 存放收件人邮件
client_mail_1 = xxxxx@yahoo.com
client_mail_2 = xxxxxx@qq.com
读取配置文件
设置完配置文件后我们自然需要读取配置文件的信息来进行使用,Python的configparser模块便很好的完成了这项功能。
下列简单介绍configparser包的使用,假设我们有一个名为class.ini的配置文件如下所示:
[class]
number = 4
num_of_people = 60
如果在python中要读取class这个section下key值为num_of_people的数据时,可以使用如下操作:
import configparser # 加载configparser模块
config = configparser.ConfigParser() # 定义一个ConfigParser对象
config.read("C:/Users/CCC/Desktop/class.ini") # 使用该对象读取class.ini配置文件
config.get("class", "num_of_people") # 获取section下的key值
'60'
通过以上的方法我们得到了class里面的人数,同理,在我们的项目里两个配置文件对应的section就是get_user和get_customers。于是,我们通过以上的知识封装好针对读取自己的配置文件的函数,并保存于config.py中,文件内容如下所示。
import configparser
#填写配置文件所对应的目录
the_path = "E:/18_learn/Project/stock/new_email/"
# 读取配置文件
# 获取发件邮箱得用户名与密码
def get_config(section, key, file_name):
config = configparser.ConfigParser()
path = the_path+file_name
config.read(path,encoding="utf-8-sig")
return config.get(section, key)
# 获取收件人邮箱列表
def get_client(option, file_name):
config = configparser.ConfigParser()
path = the_path+file_name
config.read(path,encoding="utf-8-sig")
options = config.options(option)
client_list = []
for i in options:
mail = config.get(option, i)
client_list.append(mail)
return(client_list)
编写邮件内容
我们把需要书写的邮件内容单独放到一个python文件下,方便后续的修改,在这个过程中主要使用到了Python下的email包,它提供了管理电子邮件消息的功能。
在日常的工作中,纯文本的邮件已经不足以满足我们的需求了,因此我们使用mail.mime中的MIMEText类来实现支持HTML格式的邮件,因此这样的邮件便可以支持HTML所以支持的元素,包括表单、CSS等多种功能。而你所需要的操作仅需要如下几行代码便可以设置成功。
from email.mime.text import MIMEText
from email.header import Header
msg = MIMEText(content, 'html', 'utf-8') # 在content变量中传入准备好的hhtml代码
msg['Subject'] = Header(subject, 'utf-8') # 设置邮件的主题,放入subject变量中
设置一个用于存放邮件信息的代码,命名为message.py,文件内容如下:
from email.mime.text import MIMEText
from email.header import Header
# 书写邮件内容
content = """
<meta>您好!</meta>
<p></p>
<meta>很高兴和你见面:)。</meta>
"""
# 书写邮件主题
subject = 'python email test'
def get_mail_message():
msg = MIMEText(content, 'html', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
return(msg)
发送邮件模块
设置完以上所用内容之后,只需要将他们用于发送邮件即可,SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
在这个部分使用到了smtplib这个包,它对smtp协议进行了简单的封装。下列的send.py模块封装了用于发送邮件的代码,在使用过程中只需要运行这个文件便可以成功发送邮件,具体的功能解释过多,不单独解释,在注释里进行标注。如果感兴趣的同学可以点击Python SMTP发送邮件,自行了解。
import smtplib
import sys
import config
import message
# 添加文件所在的地址的文件夹,以加载模块
sys.path.append("passl")
# 发送邮件
def send_mail():
msg = message.get_mail_message()
smtpserver = 'smtp.qq.com' # 定义发件邮箱所用的服务器类型
sender = config.get_config("get_user", "user_mail", "user.ini") # 读取发件人邮箱
username = sender
password = config.get_config("get_user", "user_pwd", "user.ini") # 读取发件人授权码
receiver = config.get_client("get_customers", "customers.ini") # 读取收件人邮箱列表
smtp = smtplib.SMTP() # 定义一个SMTP对象
smtp.connect(smtpserver) # 连接邮件服务器
smtp.login(username, password) # 使用邮箱和授权码登陆
for i in receiver:
smtp.sendmail(sender, i, msg.as_string()) # 循环发送邮件
smtp.quit() # 退出登陆
send_mail()
以上就是这个小工具群发邮件的所有内容了,其实可以可以定制的东西还很多,比如可以丰富HTML格式还美化邮件、也可以加入添加邮件附件的代码,感兴趣的同学可以自己多尝试,需要下载所有项目文件的同学可以移步我的Github,以上。