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模拟登陆Tom邮箱示例分享
Jan 13 Python
Python进程间通信用法实例
Jun 04 Python
python抓取网页中链接的静态图片
Jan 29 Python
Python实现的json文件读取及中文乱码显示问题解决方法
Aug 06 Python
使用WingPro 7 设置Python路径的方法
Jul 24 Python
Python 画出来六维图
Jul 26 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
Aug 06 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
Aug 17 Python
详解Python 重学requests发起请求的基本方式
Feb 07 Python
Python Django中间件使用原理及流程分析
Jun 13 Python
python中HTMLParser模块知识点总结
Jan 25 Python
关于Python中进度条的六个实用技巧分享
Apr 05 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
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
MySQL相关说明
2007/01/15 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
JS功能代码集锦
2016/05/04 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
python正则表达式修复网站文章字体不统一的解决方法
2013/02/21 Python
Python实现多线程的两种方式分析
2018/08/29 Python
Django 多环境配置详解
2019/05/14 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
wxPython实现列表增删改查功能
2019/11/19 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
python向图片里添加文字
2019/11/26 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
初学者学习Python好还是Java好
2020/05/26 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
博士生求职信
2014/07/06 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
2016年少先队活动总结
2016/04/06 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js