码迷,mamicode.com
首页 > 编程语言 > 详细

Python 使用office365邮箱

时间:2020-06-08 10:54:33      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:offic   end   init   注意   ext   file   return   pwd   for   

一、概述

最近遇到一个需求,需要使用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邮箱

标签:offic   end   init   注意   ext   file   return   pwd   for   

原文地址:https://www.cnblogs.com/xiao987334176/p/13064077.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!