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实现从web抓取文档的方法
Sep 26 Python
python实现根据ip地址反向查找主机名称的方法
Apr 29 Python
举例简单讲解Python中的数据存储模块shelve的用法
Mar 03 Python
详解Python中heapq模块的用法
Jun 28 Python
python字符串过滤性能比较5种方法
Jun 22 Python
基于Python代码编辑器的选用(详解)
Sep 13 Python
简单实现python数独游戏
Mar 30 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
浅谈python的深浅拷贝以及fromkeys的用法
Mar 08 Python
深度学习入门之Pytorch 数据增强的实现
Feb 26 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
python OpenCV学习笔记
Mar 31 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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
php发送post请求的三种方法
2014/02/11 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
jQuery实现图片与文字描述左右滑动自动切换的方法
2015/07/27 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
javascript实现禁止复制网页内容汇总
2015/12/30 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
python 实现端口扫描工具
2020/12/18 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
银行实习鉴定
2013/12/13 职场文书
初一地理教学反思
2014/01/16 职场文书
优秀企业获奖感言
2014/02/01 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
化工厂员工工作总结
2015/10/15 职场文书
mysql联合索引的使用规则
2021/06/23 MySQL
Vue深入理解插槽slot的使用
2022/08/05 Vue.js