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

SendGrid Email Activity API日期范围异常及无分页支持问题咨询

问题1:日期范围查询返回超出范围的内容
  • 你代码里last_event_time的参数格式有误,SQL风格的时间戳必须用单引号包裹。修改后的代码如下:
start_time = '2024-06-19T00:00:00Z'
end_time = '2024-06-19T23:59:59Z'
response = sg_client.client.messages.get(query_params={
    'limit': 1000,  # 先改成官方允许的最大值1000,设10万会被API自动截断
    'last_event_time': f"BETWEEN TIMESTAMP '{start_time}' AND TIMESTAMP '{end_time}'",
})
  • 之前的代码缺少单引号,导致API无法正确解析时间范围,从而返回超出指定区间的内容。
问题2:全量获取指定时间范围内的所有消息

SendGrid Email Activity API不支持offset参数,需要通过基于时间的分页实现全量获取,具体操作如下:

  1. 设置合理的limit值:官方规定limit最大值为1000,超过该值会被API自动调整为1000,建议直接设为1000以提升获取效率。
  2. 循环分页请求:每次请求后,取返回结果中最后一条记录的last_event_time作为下一次请求的end_time(保持start_time不变),直到返回结果为空或数量小于limit,说明已获取全部数据。
  3. 示例代码:
from sendgrid import SendGridAPIClient

def fetch_all_email_activities(api_key, start_time, initial_end_time):
    sg_client = SendGridAPIClient(api_key)
    all_activities = []
    current_end_time = initial_end_time
    limit = 1000

    while True:
        response = sg_client.client.messages.get(query_params={
            'limit': limit,
            'last_event_time': f"BETWEEN TIMESTAMP '{start_time}' AND TIMESTAMP '{current_end_time}'",
        })
        activities = response.body
        if not activities:
            break
        all_activities.extend(activities)
        # 更新下一次请求的结束时间,避免重复获取数据
        current_end_time = activities[-1]['last_event_time']
        # 返回结果数量不足limit,说明无更多数据
        if len(activities) < limit:
            break
    return all_activities

# 调用示例
start_time = '2024-06-19T00:00:00Z'
initial_end_time = '2024-06-19T23:59:59Z'
all_activities = fetch_all_email_activities(self._api_key, start_time, initial_end_time)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:43:15