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

如何基于SES搭建新邮件触发API推送的系统?

基于AWS SES的邮件接收转API推送系统实现方案

核心流程

SES 接收外部邮件 → 触发事件处理函数 → 提取邮件正文 → 向目标API发起POST请求

具体实现步骤

1. AWS SES 接收配置

  • 完成域名/邮箱验证:在AWS SES控制台中验证用于接收邮件的域名或单个邮箱地址,确保SES有权处理该地址的邮件。
  • 创建接收规则集:
    • 新建规则集,添加规则并指定触发条件(默认所有邮件)。
    • 选择目标处理方式:推荐优先将邮件存储至S3桶(用于备份),同时触发Lambda函数;若邮件体积较小(<10MB),可直接将Lambda设为规则目标,邮件内容会作为事件参数传入。
  • 配置MX记录:在域名DNS服务商处添加MX记录,指向AWS SES的 inbound 服务器(格式如 10 inbound-smtp.${region}.amazonaws.com,替换为你的AWS区域)。

2. Lambda 函数实现(Python示例)

Lambda负责解析邮件、提取正文并推送至目标API,需配置以下权限:

  • 若关联S3:拥有S3对象读取权限;
  • 若直接接收SES事件:拥有SES读取权限;
  • 网络权限:若目标API为私网地址,需将Lambda部署至对应VPC并配置NAT网关。

代码逻辑示例:

import boto3
import email
import requests
from io import BytesIO

def lambda_handler(event, context):
    # 从S3读取邮件(若直接用SES事件触发,可从event['Records'][0]['ses']['mail']获取内容)
    s3 = boto3.client('s3')
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    obj = s3.get_object(Bucket=bucket, Key=key)
    raw_email = obj['Body'].read()
    
    # 解析邮件,提取正文
    msg = email.message_from_bytes(raw_email)
    email_body = ""
    if msg.is_multipart():
        for part in msg.walk():
            if part.get_content_type() == 'text/plain':
                email_body = part.get_payload(decode=True).decode()
                break
            elif part.get_content_type() == 'text/html':
                # 若需要HTML正文,可替换此处逻辑
                pass
    else:
        email_body = msg.get_payload(decode=True).decode()
    
    # 推送至目标API
    target_api_url = "https://your-target-api.com/endpoint"
    payload = {"email_body": email_body, "subject": msg['Subject']}
    try:
        response = requests.post(target_api_url, json=payload, timeout=10)
        response.raise_for_status()
        print(f"API推送成功,状态码:{response.status_code}")
    except Exception as e:
        print(f"API推送失败:{str(e)}")
        # 可添加重试逻辑或触发告警
        raise e

注意:Lambda默认环境无requests库,需通过Lambda层部署该依赖,或改用urllib库实现HTTP请求。

3. 错误处理与监控

  • 日志监控:将Lambda日志关联至CloudWatch,实时查看执行状态与报错信息;
  • 告警配置:通过CloudWatch告警规则,在Lambda执行失败、API推送超时或返回错误码时触发SNS通知;
  • 消息可靠性:若目标API存在限流或不稳定情况,可引入SQS作为中间队列,Lambda先将邮件正文写入SQS,再由另一个Lambda从SQS消费并推送至API,避免请求丢失。

4. 限制与优化

  • SES接收配额:根据AWS账户等级调整接收邮件的频率与数量限制;
  • 邮件体积:若处理大邮件(>10MB),必须通过S3存储后再由Lambda读取;
  • 重试机制:在API推送失败时,可设置Lambda异步重试(最多2次),或结合SQS的消息重试特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:45:36