有没有办法通过API将Mailgun的日志导出到本地文件以进行长期存储?我们需要将邮件日志保留在Mailgun提供的30天内。
谢谢!
答案 0 :(得分:2)
您一次只能请求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)
答案 1 :(得分:0)
有一个简单的python脚本来检索域的日志,但我还没有检查它是否命中了事件api而不是现在已弃用的日志API ...
答案 2 :(得分:0)
您可以查看MailgunLogger。 这是一个开源项目,可以轻松地通过Docker进行部署,以将Mailgun事件提取并存储在数据库中。它具有完全简单但基本的搜索功能,并且允许您添加多个帐户/域。
通过Docker运行:
docker run -d -p 5050:5050 \
-e "ML_DB_USER=username" \
-e "ML_DB_PASSWORD=password" \
-e "ML_DB_NAME=mailgun_logger" \
-e "ML_DB_HOST=my_db_host" \
--name mailgun_logger jackjoe/mailgun_logger
从那里开始,该界面指导您配置所有内容。
在OP情况下,可以仅使用数据库而不是提供的UI来更轻松地使用此项目。