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 相关文章推荐
详解Python中DOM方法的动态性
Apr 11 Python
python实现爬取千万淘宝商品的方法
Jun 30 Python
Python编程中的for循环语句学习教程
Oct 14 Python
Python实现屏幕截图的两种方式
Feb 05 Python
Django中使用 Closure Table 储存无限分级数据
Jun 06 Python
python 日期排序的实例代码
Jul 11 Python
python自动分箱,计算woe,iv的实例代码
Nov 22 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
Feb 27 Python
Python如何用wx模块创建文本编辑器
Jun 07 Python
pandas之分组groupby()的使用整理与总结
Jun 18 Python
Python Flask实现进度条
May 11 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
JS实现php的伪分页
2008/05/25 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
JS实现网页烟花动画效果
2020/03/10 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
Python DataFrame设置/更改列表字段/元素类型的方法
2018/06/09 Python
django如何连接已存在数据的数据库
2018/08/14 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
python使用列表的最佳方案
2020/08/12 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
如何设置Java的运行环境
2013/04/05 面试题
不打扫卫生检讨书
2014/02/12 职场文书
幼儿园秋游感想
2014/03/12 职场文书
工伤赔偿协议书
2014/04/15 职场文书
金融系应届毕业生求职信
2014/05/26 职场文书
优秀员工推荐材料
2014/12/20 职场文书
介绍信样本
2015/01/31 职场文书
公司门卫岗位职责
2015/04/13 职场文书
编写python程序的90条建议
2021/04/14 Python
Win7/8.1用户可以免费升级到Windows 11系统吗?
2021/11/21 数码科技