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生成pdf文件的方法
Aug 04 Python
跟老齐学Python之编写类之四再论继承
Oct 11 Python
Python探索之ModelForm代码详解
Oct 26 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
pandas重新生成索引的方法
Nov 06 Python
对Python发送带header的http请求方法详解
Jan 02 Python
python 随机森林算法及其优化详解
Jul 11 Python
NumPy排序的实现
Jan 21 Python
python适合做数据挖掘吗
Jun 16 Python
一文轻松掌握python语言命名规范规则
Jun 18 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
Autopep8的使用(python自动编排工具)
Mar 02 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
php中常用编辑器推荐
2007/01/02 PHP
PHP处理会话函数大总结
2015/08/05 PHP
使用Composer安装Yii框架的方法
2016/03/15 PHP
php array_values 返回数组的值实例详解
2016/11/17 PHP
javascript URL编码和解码使用说明
2010/04/12 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
2014/02/07 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
Python中Collection的使用小技巧
2014/08/18 Python
Python第三方库的安装方法总结
2016/06/06 Python
简单谈谈Python中的闭包
2016/11/30 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
python 实现Harris角点检测算法
2020/12/11 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
应届生自荐书
2014/06/23 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
防汛通知
2015/04/25 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
2015年材料员工作总结
2015/04/30 职场文书
redis 限制内存使用大小的实现
2021/05/08 Redis
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS