You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动将Office 365 Outlook邮件及附件同步至AWS S3?

Office 365 Outlook邮件及附件自动同步到AWS S3的实现方案

方案一:AWS Lambda + Microsoft Graph API

这是无服务器后台运行的最优方案,完全符合要求:

  1. Azure AD应用配置

    • 登录Azure门户,注册新的Azure AD应用程序,获取租户ID、客户端ID、客户端密钥。
    • 为应用添加应用权限:Mail.Read(必须是应用权限而非委派权限,因为Lambda是后台无交互运行),并授予管理员同意。
  2. Lambda函数开发
    用Python编写函数,核心逻辑是调用Microsoft Graph API拉取邮件及附件,再上传到S3。示例代码如下:

    import boto3
    import requests
    import os
    from urllib.parse import quote
    
    # 从Lambda环境变量读取配置
    TENANT_ID = os.environ['TENANT_ID']
    CLIENT_ID = os.environ['CLIENT_ID']
    CLIENT_SECRET = os.environ['CLIENT_SECRET']
    S3_BUCKET = os.environ['S3_BUCKET']
    
    def get_access_token():
        token_url = f"https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token"
        payload = {
            'client_id': CLIENT_ID,
            'client_secret': CLIENT_SECRET,
            'scope': 'https://graph.microsoft.com/.default',
            'grant_type': 'client_credentials'
        }
        resp = requests.post(token_url, data=payload)
        resp.raise_for_status()
        return resp.json()['access_token']
    
    def sync_emails():
        token = get_access_token()
        headers = {'Authorization': f'Bearer {token}'}
        # 拉取未读收件箱邮件并扩展附件信息,可修改$filter调整同步规则
        msg_url = "https://graph.microsoft.com/v1.0/me/mailfolders/inbox/messages?$expand=attachments&$filter=isRead eq false"
        resp = requests.get(msg_url, headers=headers)
        resp.raise_for_status()
        messages = resp.json()['value']
    
        s3_client = boto3.client('s3')
    
        for msg in messages:
            # 处理邮件主题特殊字符,避免S3路径错误
            safe_subject = quote(msg['subject'].replace('/', '_').replace('\\', '_'))
            msg_id = msg['id']
            # 标记邮件为已读,避免重复同步
            requests.patch(f"https://graph.microsoft.com/v1.0/me/messages/{msg_id}", headers=headers, json={'isRead': True})
    
            if 'attachments' in msg:
                for att in msg['attachments']:
                    if att['@odata.type'] == '#microsoft.graph.fileAttachment':
                        # 下载附件内容
                        att_download_url = f"https://graph.microsoft.com/v1.0/me/messages/{msg_id}/attachments/{att['id']}/$value"
                        att_resp = requests.get(att_download_url, headers=headers)
                        att_resp.raise_for_status()
                        # 构造S3存储路径
                        s3_key = f"outlook_sync/{safe_subject}/{att['name']}"
                        # 上传到S3
                        s3_client.put_object(
                            Bucket=S3_BUCKET,
                            Key=s3_key,
                            Body=att_resp.content,
                            ContentType=att['contentType']
                        )
    
    def lambda_handler(event, context):
        sync_emails()
        return {'statusCode': 200, 'body': 'Sync completed'}
    
  3. Lambda配置

    • 在Lambda控制台添加环境变量:TENANT_ID、CLIENT_ID、CLIENT_SECRET、S3_BUCKET。
    • 为Lambda的IAM角色添加s3:PutObject权限,目标为指定S3桶。
    • 配置CloudWatch Events触发器,设置定时规则(如每小时一次)实现自动同步。
  4. 注意事项

    • 若附件超过4MB,需使用Graph API增量下载接口实现分段下载,参考官方文档调整代码。
    • 修改Graph API的$filter参数,可实现仅同步特定发件人、主题含关键词的邮件等精细规则。

方案二:服务器端定时脚本

若偏好传统服务器部署,可在EC2或其他云服务器上运行脚本,配合定时任务实现同步:

  1. 环境准备

    • 安装Python及依赖(requests、boto3)。
    • 配置AWS凭证:通过IAM角色关联服务器(推荐),或在服务器上配置~/.aws/credentials。
  2. 脚本开发
    逻辑与Lambda函数一致,去掉lambda_handler,直接执行sync_emails()函数。

  3. 定时任务配置

    • Linux系统:用crontab添加定时任务,例如每天凌晨2点执行:
      0 2 * * * /usr/bin/python3 /path/to/your/sync_script.py
      
    • Windows系统:用“任务计划程序”创建定时任务。

方案三:Microsoft Power Automate云流

若不想编写代码,可尝试Power Automate云流方案,之前连接器配置失败可能是权限或配置问题:

  1. 创建云流

    • 登录Power Automate,选择“创建”→“自动化云流”,触发条件选“当有新邮件到达时(V3)”,关联你的Office 365 Outlook账户。
    • 添加动作“获取邮件附件”,选择触发动作中的邮件。
    • 添加AWS S3的“上传文件”动作,配置AWS账户(需授予S3写入权限),选择目标桶,映射附件内容和文件名。
  2. 优化同步规则

    • 在触发动作中设置过滤条件:如仅同步收件箱、未读邮件、特定文件夹的邮件。
    • 添加“标记邮件为已读”动作,避免重复同步。

内容的提问来源于stack exchange,提问作者goka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:50:31