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正则表达式去掉数字中的逗号(python正则匹配逗号)
Dec 25 Python
Python实现从脚本里运行scrapy的方法
Apr 07 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
Apr 19 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
python3利用ctypes传入一个字符串类型的列表方法
Feb 12 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 Python
python实现连连看辅助(图像识别)
Mar 25 Python
python实现按关键字筛选日志文件
Dec 24 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
Python post请求实现代码实例
Feb 28 Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 Python
Python - 10行代码集2000张美女图
May 23 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
在数据量大(超过10万)的情况下
2007/01/15 PHP
thinkphp 多表 事务详解
2013/06/17 PHP
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
js 金额文本框实现代码
2012/02/14 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
javascript编写简易计算器
2017/05/06 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
React根据宽度自适应高度的示例代码
2017/10/11 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
深入理解python对json的操作总结
2017/01/05 Python
python数据处理实战(必看篇)
2017/06/11 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
Python向excel中写入数据的方法
2019/05/05 Python
巴黎一票通:The Paris Pass
2018/02/10 全球购物
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
售后专员岗位职责
2013/12/08 职场文书
毕业生班级鉴定评语
2015/01/04 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书