最近工作中的一个项目有自动发送一些信息邮件到指定邮箱的需求,那么如何用Python来实现自动发送邮件的功能呢?接下来就简单的来说一下。
Python SMTP发送邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议 ,说白了就是发送邮件的协议,python的smplib库对SMTP协议进行了简单的封装,提供了对SMTP的支持,可以发送纯文本邮件、HTML文件以及带附件的邮件。
首先我们构建一个SendEmailManager类,也是遵循着面向对象编程的思想来做,大体结构如下:
class SendEmailManager(object):
def __init__(self, **kwargs):
# 初始化参数
...
def _get_conf(self, key):
# 获取配置参数
...
def _init_conf(self):
# 初始化配置参数
...
def _login_email(self):
# 登录邮箱服务器
...
def _make_mail_msg(self):
# 构建文本邮件对象
...
def do_send_mail(self):
# 邮件发送
...
def __init__(self, **kwargs)
类的初始化函数,可以用来设置对象属性,并给予初始值,可以是参数或者固定值 ,其中参数 **kwargs 是将一个可变的关键字参数的字典传给函数实参,这里里我们主要是对SMTP服务器(这里使用qq邮箱)、发送邮件的代理邮箱、在邮箱中设置的客户端授权密码、可变参数进行一些初始化。具体代码如下:
# SMTP服务器,这里使用qq邮箱,其他邮箱自行百度
EMAIL_HOST = 'smtp.qq.com'
# 发送邮件的代理邮箱
EMAIL_HOST_USER = 'xxxx@xxxx.com'
# 在邮箱中设置的客户端授权密码, 注意这里不是邮箱密码,关于如何获取邮箱授权码,请自行百度~~~
EMAIL_HOST_PASSWORD = 'xxxxxxxxxxxxx'
def __init__(self, **kwargs):
# 初始化参数
self.email_host = EMAIL_HOST
self.email_host_user = EMAIL_HOST_USER
self.email_host_pass = EMAIL_HOST_PASSWORD
self.kwargs = kwargs
def _get_conf(self, key)
主要负责通过key读取 可变参数self.kwargs 字典里的值,供其他函数使用。
def _get_conf(self, key):
# 获取配置参数
value = self.kwargs.get(key)
if key != "attach_file_list" and (value is None or value =