更多编程教程请到:菜鸟教程 https://www.piaodoo.com/

友情链接:

高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com/

最近工作中的一个项目需要自动发送一些信息邮件到指定邮箱的需求,那么如何实现Python自动发送邮件的功能呢?接下来我们就来简单的介绍下如何利用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_HOSTself.email_host_user = EMAIL_HOST_USERself.email_host_pass = EMAIL_HOST_PASSWORDself.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 == ''):raise Exception("configuration parameter '%s' cannot be empty" % key)return value

def _init_conf(self)

该函数主要负责初始化 函数_get_conf 返回的配置参数, 以便接下来的函数可以调用相关配置参数。

def _init_conf(self):# 初始化配置参数print(self._get_conf('receives'))self.receives = self._get_conf('receives')self.msg_subject = self._get_conf('msg_subject')self.msg_content = self._get_conf('msg_content')self.msg_from = self._get_conf('msg_from')# attachmentself.attach_file_list = self._get_conf('attach_file_list')

def _login_email(self)

登录邮件服务器, 我这里登陆的是qq邮箱的服务器,端口号为465,其他邮箱端口号请自行百度,代码如下:

def _login_email(self):# 登录邮箱服务器try:server = smtplib.SMTP_SSL(self.email_host, port=465)# set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息server.set_debuglevel(1)# 登录邮箱server.login(self.email_host_user, self.email_host_pass)return serverexcept Exception as e:print("mail login exception:", e)raise e

def _make_mail_msg(self)

该函数的功能为构建一个邮件实例对象,来处理邮件的内容。一封正常的邮件一般有收发件者信息,邮件主题,邮件正文,有些邮件还附带有附件,具体的设置参见如下代码:

def _make_mail_msg(self):# 构建邮件对象msg = MIMEMultipart()msg.attach(MIMEText(self.msg_content, 'plain', 'utf-8'))# 邮件主题msg['Subject'] = Header(self.msg_subject, "utf-8")# 发件人邮箱信息msg['From'] = "<%s>" % self.msg_from# msg['From'] = Header(self.msg_from + "<%s>" % self.email_host_user, "utf-8")msg['To'] = ",".join(self.receives)print("---", self.attach_file_list)if self.attach_file_list:for i, att in enumerate(self.attach_file_list):# 构造附件,传送当前目录下的文件if not att:breakatt_i = MIMEText(open(att, 'rb').read(), 'base64', 'utf-8')att_i["Content-Type"] = 'application/octet-stream'# 这里的filename可以任意写,写什么名字,邮件中显示什么名字att_i["Content-Disposition"] = 'attachment; filename="%s"' % attmsg.attach(att_i)return msg

def do_send_mail(self)

发送邮件,就是把上几个函数串起来,直接上代码:

def do_send_mail(self):# 邮件发送try:self._init_conf()server = self._login_email()msg = self._make_mail_msg()server.sendmail(self.email_host_user, self.receives, msg.as_string())server.close()print("发送成功!")except Exception as e:print("邮件发送异常", e)

配置参数,测试能否正常发送邮件:

if __name__ == "__main__":mail_conf = {'msg_from': 'xxxx@qq.com', # 邮件发送者的地址'receives': ['xxxx@qq.com', 'xxxxxxxx@xxxx.com', ], # 邮件接收者的地址,这是个list,因为邮件的接收者可能不止一个'msg_subject': 'Python 自动发送邮件测试!!', # 邮件的主题'msg_content': '人生苦短,我用python!!!', # 邮件的内容'attach_file_list': {"test_file1.py": "test.py", "test_file2.pem": "./public.pem"}, # 为附件文件路径列表,也是个list,也可没有这项}

manager = SendEmailManager(**mail_conf)
manager.do_send_mail()

ok,发送成功,添加附件也是没问题的。

开始我们讲的获取客户端邮箱的授权码,教程如下(以qq邮箱为例):

好了,目标完成。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持菜鸟教程www.piaodoo.com。

基于python SMTP实现自动发送邮件教程解析相关推荐

  1. python发微信提醒天气_基于Python实现定时自动给微信好友发送天气预报

    效果图 from wxpyimport * import requests from datetimeimport datetime import time from apscheduler.sche ...

  2. python发送文件给微信好友_基于Python实现定时自动给微信好友发送天气预报

    效果图 from wxpyimport * import requests from datetimeimport datetime import time from apscheduler.sche ...

  3. 利用Python调用outlook自动发送邮件

    ↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ 使用Python发送邮件有两种方式,一种是使用smtp调用邮箱的smtp服务器,另一种是直接调用程序直接发送邮件.而在outlo ...

  4. 基于Python的DICOM文件转换教程,使用pydicom将图片存为DICOM文件。

    基于Python的DICOM文件转换教程,使用pydicom将图片存为DICOM文件. DICOM是医学图像和信息的数字化标准,可用于将医学影像数据.诊断报告等信息在医疗领域进行传输.分享和分析.而常 ...

  5. python软件开发电子产品测试方向_基于Python语言的自动测试系统通用软件平台实现...

    期 No.5 2019 年 3 月 Mar. 2019 收稿日期: 2018-05-06 稿件编号: 201805027 基金项目: 中国电科第十研究所发展基金 ( SSJ-1784 ) 作者简介: ...

  6. python做cae库,基于Python的CAE自动后处理开发

    以下文章来源于CAE数值优化轻量化,作者方永利 前面讲到了基于meta和hypergraph进行NVH分析(IPI.VTF.NTF)自动后处理,包括结果提取和自动出报告等功能. 基于META自动后处理 ...

  7. 基于python的12306自动抢票系统的设计与实现

    铁路售票系统12306网站作为一个广受人们的日常使用工具,受大极大的关注.铁路售票的管理者都主要考虑降低成本,提升售票服务满意度.一年一度的春运和节假日出行高峰期,给众多的出行群众者带来了极大的烦恼, ...

  8. PC后台管理( 基于图形化界面自动安装教程)

    基于vsode开发的一套后台管理 技术选项 一.项目初始化 1.1前端项目初始化步骤 1.2后台管理的环境安装安装配置 1.3登录和退出的功能 1.4主页 把跟新后的代码提交到马云上去 三级目录 技术 ...

  9. 基于Python的气象时空数据分析教程

    目录 一.时空数据的常见格式 1. 常见格式的简介 2. 常见格式的读取 导入模块 读取nc数据 创建nc数据 绘制nc数据 绘制GeoTIFF数据 ​读取Shapefile数据 绘制Shapefil ...

最新文章

  1. WCF中的ServiceHost初始化两种方式
  2. Silverlight实用窍门系列:66.Silverlight的数据模板DataTemplate(二)获取数据模板控件...
  3. opencv 图片边缘渐变_基于OpenCV的图像卡通化
  4. VMware Workstation网络连接的三种方式原理详解 与 配置过程图解
  5. ios UIScrollView 基础属性
  6. Linq语言集成查询
  7. PMP考试真题模拟PMP考试模拟试题及答案详解
  8. LeetCode 分数加减运算
  9. 中国食品甘油行业市场供需与战略研究报告
  10. 源码解读五:流量整型算法实现分析
  11. Cannot connenct to relay host smtp.163.com (php邮件发送失败)
  12. Qt父窗体子窗体获取绝对相对坐标全面剖析(待续)
  13. 软考高级-信息系统管理师之项目管理基础(最新版)
  14. SaaS Metrics Math: Tools Resources for Growth Rate, Churn Rate, ARR, MRR More
  15. 【渝粤教育】电大中专计算机职业素养 (2)作业 题库
  16. UE5 官方案例Lyra 全特性详解 9.蓝图消息系统
  17. 菜鸟初学freenas
  18. Flash小游戏:Chat Noir
  19. Google勇敢新世界:两个天才的相遇
  20. Centos7安装minio文件服务器

热门文章

  1. 公网SSH远程树莓派【内网穿透】 1-2
  2. android手机运行win10,Win10可以直接运行你手机里的安卓APP了:三星率先支持
  3. Mysql之AUTO_INCREMENT浅析
  4. 《AngularJS深度剖析与最佳实践》一1.3 创建项目
  5. eva新世纪福音战士_新世纪福音战士EVA,一部划时代的作品!
  6. 使用Haproxy Exporter监控Sparkthrift存活率
  7. cesium 加载模型实现动画效果
  8. 电子表格文件读写控件Spreadsheet免费下载购买地址
  9. 开源集市@中关村|气氛热烈,完美收官!
  10. 怎么在小程序里开店铺?【小程序开店】