从 Mailgun for LTS 导出日志

Tom*_* K. 4 mailgun

有没有办法通过 API 将 Mailgun 的日志导出到本地文件以进行长期存储?我们需要将邮件日志保留超过 Mailgun 规定的 30 天。

谢谢!

eva*_*van 5

您一次只能请求 300 个事件,因此您必须继续获取下一页,直到用完结果为止。然后,您可以对日志项目执行任何您想要的操作,例如生成 csv,或在数据库中添加项目。查看https://documentation.mailgun.com/en/latest/api-events.html#events了解 API 文档。下面是一个 Python 示例:

import requests
import csv
from datetime import datetime, timedelta

DATETIME_FORMAT = '%d %B %Y %H:%M:%S -0000'

def get_logs(start_date, end_date, next_url=None):
    if next_url:
        logs = requests.get(next_url,auth=("api", [YOUR MAILGUN ACCESS KEY]))
    else:
        logs = requests.get(
            'https://api.mailgun.net/v3/{0}/events'.format(
                [YOUR MAILGUN SERVER NAME]
            ),
            auth=("api", [YOUR MAILGUN ACCESS KEY]),
            params={"begin"       : start_date.strftime(DATETIME_FORMAT),
                    "end"         : end_date.strftime(DATETIME_FORMAT),
                    "ascending"   : "yes",
                    "pretty"      : "yes",
                    "limit"       : 300,
                    "event"       : "accepted",}
        )
    return logs.json()


start = datetime.now() - timedelta(2)
end = timezone.now() - timedelta(1)
log_items = []
current_page = get_logs(start, end)

while current_page.get('items'):
    items = current_page.get('items')
    log_items.extend(items)
    next_url = current_page.get('paging').get('next', None)
    current_page = get_logs(start, end, next_url=next_url)

keys = log_items[0].keys()
with open('mailgun{0}.csv'.format(start.strftime('%Y-%M-%d')), 'wb') as output_file:
    dict_writer = csv.DictWriter(output_file, keys)
    dict_writer.writeheader()
    dict_writer.writerows(log_items)
Run Code Online (Sandbox Code Playgroud)