首页 > 编程语言 >python发送、接收exchange邮件

python发送、接收exchange邮件

时间:2024-02-06 10:35:14浏览次数:29  
标签:account return exchange python datetime mail email 邮件

导包

import datetime
from pathlib import Path

import pytz
from exchangelib import Configuration, Account, DELEGATE, Q, Credentials, HTMLBody, Message, FileAttachment
from exchangelib.protocol import CachingProtocol

连接邮箱

server = 'example.com'
domain = 'domain.example.com'
username = 'your_username'
password = 'your_password'
address = 'your_email_address'


def outlook_login():
    """
    连接Outlook邮箱
    :return: 邮箱对象
    """
    try:
        # 账户信息(域用户)
        config = Configuration(
            server=server,
            credentials=Credentials(f'{domain}\\{username}', password)
        )
        # 连接邮箱账号
        account = Account(
            primary_smtp_address=address,
            config=config,
            autodiscover=False,
            access_type=DELEGATE
        )
        return account
    except Exception as e:
        print(f'邮件连接失败,原因:{str(e)}')
        CachingProtocol.clear_cache()
        return

接收邮件

def received_outlook_message():
    """
    接收Exchange邮件
    return:邮件对象集合
    """
    account = outlook_login()
    if not account:
        print('outlook登录失败')
        return []
    
    sub1 = 'Indicative Deposit Rates'
    sub2 = 'Time Deposit Indication'
    # 设置时区
    tz = pytz.timezone('Asia/Shanghai')
    today = datetime.datetime.now(tz).date()

    # 时间过滤:当天
    start_of_day = tz.localize(datetime.datetime.combine(today, datetime.datetime.min.time()))
    end_of_day = tz.localize(datetime.datetime.combine(today, datetime.datetime.max.time()))

    # 主题过滤
    sub_filter = (Q(subject__icontains=sub1) | Q(subject__icontains=sub2))

    # 组合过滤条件
    mail_filter = Q(is_read=False) & Q(datetime_received__lte=end_of_day) & Q(
        datetime_received__gte=start_of_day) & sub_filter

    # 读取符合条件的邮件
    unread_message = account.inbox.filter(mail_filter)
    return unread_message

发送邮件

def send_outlook_mail(subject, body, to_email, cc_email=None, bcc_email=None, attachments=None):
    """
    发送邮件
    :param subject: 邮件主题
    :param body: 邮件正文
    :param to_email: 收件人
    :param cc_email: 抄送人
    :param bcc_email: 密送人
    :param attachments: 附件列表
    :return:
    """
    account = outlook_login()
    if not account:
        print('outlook登录失败')
        return
    mail = Message(
        account=account,
        folder=account.sent,
    )
    mail.subject = subject
    mail.body = HTMLBody(body)
    if isinstance(to_email, str):
        to_email = [to_email]
    mail.to_recipients = to_email
    if isinstance(cc_email, str):
        cc_email = [cc_email]
    mail.cc_recipients = cc_email
    if isinstance(bcc_email, str):
        bcc_email = [bcc_email]
    mail.bcc_recipients = bcc_email
    if attachments:
        for attachment in attachments:
            file_name = str(Path(attachment).name)
            with open(attachment, 'rb') as f:
                content = f.read()
            file = FileAttachment(name=file_name, content=content)
            mail.attach(file)
    try:
        mail.send_and_save()
    except Exception as e:
        print(f'邮件发送失败:{e}')

标签:account,return,exchange,python,datetime,mail,email,邮件
From: https://www.cnblogs.com/rong-z/p/18009281

相关文章

  • 打造个性化日历:Python编程实现,选择适合你的方式!
    在本文中,我们将使用Python编写一个简单的日历程序。虽然市面上已经存在现成的日历功能,并且有第三方库可以直接调用实现,但我们仍然希望通过自己编写日历程序来引出我认为好用的日历实现。希望这篇文章能够对你有所帮助。在Python官方文档中,我们可以找到一个名为"calendar"的模块,它......
  • ML-Agents Python包安装
    Unity的机器学习工具包ML-Agents还是挺好用的,但是其Python后端在安装的过程中会出一些问题,在这里记录一下。为了方便多Python环境管理,我在搭建环境的时候使用了Anaconda包管理器。目前ML-Agents支持的Python版本为3.10.12,版本过高或过低都可能会缺少对应的依赖。打开一个PowerShe......
  • Python中利用all()来优化减少判断的代码
    ​ Python中,all()函数是一个非常实用的内置函数,用于检查可迭代对象中的所有元素是否都满足某个条件。当你需要对多个条件进行逻辑与(AND)操作时,使用all()可以使代码更加简洁和可读。 参考文档:Python中利用all()来优化减少判断的代码-CJavaPy1、使用all()减少判断要检查......
  • Python 机器学习 特征预处理
    1、缩放特征(FeatureScaling)特征预处理是一个重要的步骤,而特征缩放(FeatureScaling)是其中的一个关键环节。特征缩放通常用于标准化数据集中各个特征的范围,使它们在相似的尺度上。这一步骤对于许多机器学习算法特别重要,尤其是那些基于距离的算法(如K-近邻)和梯度下降法(如线性回归、......
  • Python文本转语音库:pyttsx3 初识
    1.安装pipinstallpyttsx32.示例#coding=utf-8importpyttsx3text="""在这个例子中,使用三引号可以创建多行字符串,换行符会自动包含在字符串中。请注意,在这些方法中,字符串的换行拼接可以根据需要进行布局,以增强代码的可读性和可维护性。"""engine=pyttsx3.init()......
  • 第 1 章 Python 爬虫概念与 Web 基础
    第1章Python爬虫概念与Web基础1.1爬虫概念1.1.1什么是爬虫爬虫,即网络爬虫,又称网络蜘蛛(WebSpider),是一种按照一定规则,用来自动浏览或抓取万维网数据的程序。可以把爬虫程序看成一个机器人,它的功能就是模拟人的行为去访问各种站点,或者带回一些与站点相关的信息。它可以2......
  • Python开源数据集
    1、工具库介绍为了使初学者更容易入门,许多开源库提供了丰富而标准化的示例数据集,其中包括scikit-learn、NLTK、TensorFlowDatasets、KerasDatasets、Statsmodels以及Seaborn等。Scikit-learn:Scikit-learn是一个用于机器学习和数据挖掘的Python开源库,提供了丰富而灵活的工具,......
  • Python在处理飞书下载二进制文件时转换的问题
    最近在使用飞书,想通过接口来下载飞书文档https://open.feishu.cn/api-explorer/cli_a5049e070838d00c?apiName=download发现无法将二进制流转换为文件后来发现其文档有一些谬误,文档上写的是response.text实际写入二进制文件需要的是response.content#发起下载请求,拿到文......
  • Eralng 学习笔记第六天, Fun,进程,电子邮件,数据库,端口
    ErlangFun  示例:-module(helloworld). -export([start/0]). start() ->    A = fun(X) ->       io:fwrite("~p~n",[X])       end,    A(5).输出5----------------------------------------------------module(helloworld). -export(......
  • 树莓派上基于Python控制GPIO
    树莓派上基于Python控制GPIO希望做到可以自动给阳台的花儿浇水~有以下几点:控制GPIO的拉高/拉低,并保持一段时间间隔加锁,避免重复有日志记录具体情况#!/usr/bin/envpython3#-*-coding:UTF-8-*-importRPi.GPIOasGPIOimporttimeimportfcntlimportloggingcl......