Python 使用office365邮箱的示例


Posted in Python onOctober 29, 2020

一、概述

最近遇到一个需求,需要使用office365邮箱发送邮件,使用SSL发送会失败,必须使用TLS加密协议才能发送成功。

二、完整代码

使用类封装了一下,功能如下:

1. 支持附件

2. 支持多个发件人

3. 执行TLS

MailTools.py

#!/usr/bin/env python3
# coding: utf-8


import smtplib # 加载smtplib模块
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
import time

class SendMail(object):
  def __init__(self,sender,title,content):
    self.sender = sender #发送地址
    self.title = title # 标题
    self.content = content # 发送内容
    self.sys_sender = 'xx@office365.com' # 系统账户
    self.sys_pwd = '123456' # 系统账户密码

  def send(self,file_list):
    """
    发送邮件
    :param file_list: 附件文件列表
    :return: bool
    """
    try:
      # 创建一个带附件的实例
      msg = MIMEMultipart()
      # 发件人格式
      msg['From'] = formataddr(["", self.sys_sender])
      # 收件人格式
      msg['To'] = formataddr(["", self.sender])
      # 邮件主题
      msg['Subject'] = self.title

      # 邮件正文内容
      msg.attach(MIMEText(self.content, 'plain', 'utf-8'))

      # 多个附件
      for file_name in file_list:
        print("file_name",file_name)
        # 构造附件
        xlsxpart = MIMEApplication(open(file_name, 'rb').read())
        # filename表示邮件中显示的附件名
        xlsxpart.add_header('Content-Disposition','attachment',filename = '%s'%file_name)
        msg.attach(xlsxpart)

      # SMTP服务器
      server = smtplib.SMTP("smtp.office365.com", 587,timeout=10)
      server.ehlo()
      server.starttls()
      # 登录账户
      server.login(self.sys_sender, self.sys_pwd)
      # 发送邮件
      server.sendmail(self.sys_sender, [self.sender, ], msg.as_string())
      # 退出账户
      server.quit()
      return True
    except Exception as e:
      print(e)
      return False

if __name__ == '__main__':
  # 发送地址
  sender = "12345678@qq.com"
  # 标题
  title = "测试告警"
  # 开始时间
  start_time = time.strftime('%Y-%m-%d %H:%M:%S')
  ip = "xx.xx.xx.xx"
  # 发送内容
  content = "{} ip: {} 掉线".format(start_time,ip)
  # 附件列表
  file_list = []
  ret = SendMail(sender, title, content).send(file_list)
  print(ret,type(ret))

注意:请根据实际情况,修改邮件账号和密码。

以上就是Python 使用office365邮箱的示例的详细内容,更多关于python 使用office邮箱的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
Nov 27 Python
Python实现程序的单一实例用法分析
Jun 03 Python
python文件操作相关知识点总结整理
Feb 22 Python
Python信息抽取之乱码解决办法
Jun 29 Python
Python sorted函数详解(高级篇)
Sep 18 Python
Python tkinter的grid布局及Text动态显示方法
Oct 11 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
Dec 12 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
使用python爬取抖音app视频的实例代码
Dec 01 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
Jan 18 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
Oct 29 #Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
Oct 29 #Python
15个Pythonic的代码示例(值得收藏)
Oct 29 #Python
python 如何设置守护进程
Oct 29 #Python
python 多线程中join()的作用
Oct 29 #Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 #Python
python 实现音频叠加的示例
Oct 29 #Python
You might like
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
JavaScript关于select的相关操作说明
2010/01/13 Javascript
Script的加载方法小结
2011/01/12 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
javascript实现点击按钮切换轮播图功能
2020/09/23 Javascript
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
python中使用序列的方法
2015/08/03 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
Python按钮的响应事件详解
2019/03/04 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
Python turtle库的画笔控制说明
2020/06/28 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
C# .NET面试题
2015/11/28 面试题
国外软件测试工程师面试题
2016/12/09 面试题
综合实践活动总结
2014/05/05 职场文书
我爱我校演讲稿
2014/05/21 职场文书
单位租房协议范本
2014/12/03 职场文书
2015年仓库管理员工作总结
2015/04/21 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python