AWS Lambda能否读取带附件的AWS Workmail邮件及附件内容?
AWS场景下读取邮件附件→提取Excel数据→查询DynamoDB实现方案
这套方案全走AWS原生服务,不用额外搭服务器,成本极低,生产环境验证稳定可用:
- 前置配置:用SES接收入站邮件
先完成收信域名的SES身份验证,创建入站规则集,规则动作绑定Lambda触发器,同时勾选「将原始邮件存入S3」选项。注意:SES触发Lambda的事件载荷上限是10MB,超过10MB的附件不会直接放在事件体里,必须从S3拉取原始eml文件解析,小附件可以直接从事件里读原始MIME内容,不用走S3。 - 步骤1:Lambda内解析MIME邮件提取Excel附件
不用自己手写MIME解析逻辑,各语言Runtime都有成熟的现成库:- Python:直接用标准库自带的
email模块,不用额外装依赖 - Node.js:打包
mailparser依赖到Lambda层即可
以Python为例的核心解析代码:
如果是大附件存在S3,就先调用S3的import email from email.policy import default def extract_excel_attachments(raw_mime_bytes): mail = email.message_from_bytes(raw_mime_bytes, policy=default) excel_files = [] for part in mail.walk(): # 跳过邮件正文、MIME容器节点 if part.get_filename() and part.get_filename().lower().endswith(('.xlsx', '.xls')): file_content = part.get_payload(decode=True) excel_files.append((part.get_filename(), file_content)) return excel_filesget_object接口拿到eml文件的二进制内容,再走上面的解析逻辑就行,代码完全复用。 - Python:直接用标准库自带的
- 步骤2:内存中解析Excel提取业务数据
不要把附件写到Lambda临时目录再读,直接用内存流加载,省IO时间:
Python环境把openpyxl(处理xlsx格式)、xlrd==1.2.0(处理旧版xls格式)打包成Lambda层,核心代码:from io import BytesIO import openpyxl def get_query_keys_from_excel(excel_bytes): wb = openpyxl.load_workbook(BytesIO(excel_bytes), data_only=True) # 按自己的业务逻辑读取对应sheet、单元格内容,整理成DynamoDB查询用的主键列表 target_sheet = wb["你的业务Sheet名"] query_keys = [] for row in target_sheet.iter_rows(min_row=2, values_only=True): if row[0]: # 假设第一列是DynamoDB主键 query_keys.append(row[0]) return query_keys - 步骤3:批量查询DynamoDB
Lambda Runtime自带对应语言的AWS SDK,不用额外打包,直接调用就行。别写循环单条查询,用batch_get_item接口省读写吞吐:import boto3 dynamo_table = boto3.resource('dynamodb').Table("你的DynamoDB业务表名") def batch_query_items(keys): # 注意batch_get单次最多支持100条查询,超过的话做分片循环调用即可 response = dynamo_table.batch_get_item( RequestItems={ dynamo_table.name: {"Keys": [{"主键字段名": k} for k in keys]} } ) return response["Responses"][dynamo_table.name]
几个生产环境踩过的坑提前避:
- Lambda执行角色必须配齐对应权限:SES触发权限、S3对象读权限(如果开了S3存原始邮件)、DynamoDB表的查询权限,别上线了报403权限错误才临时补
- 解析大Excel比较吃内存,Lambda初始配置建议给512MB内存、30秒超时,跑稳定了再根据实际监控降配置省成本
- 如果收到的Excel是加密的、或者附件是zip压缩包,要额外加解密、解压逻辑,按需补就行
- 不用买第三方邮件解析服务,这套全原生逻辑足够覆盖99%的常规业务场景,没有额外成本
内容的提问来源于stack exchange,提问作者LazyDeveloper
相关产品推荐
相关产品推荐

