Python 使用office365邮箱

Posted 肖祥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 使用office365邮箱相关的知识,希望对你有一定的参考价值。

一、概述

最近遇到一个需求,需要使用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邮箱的主要内容,如果未能解决你的问题,请参考以下文章

如何设置outlook office365邮箱的中继

如何设置office365企业邮箱

Office365 如何导出云用户的邮箱数据pst

powershell 批量获取office365用户邮箱使用容量

office365 邮箱用户完全访问权限管理介绍

office365无法设置foxmail的pop邮箱