from email.utils import format_datetime import requests from datetime import datetime from django.core.management.base import BaseCommand from django.conf import settings def get_logs(limit, date, subject): r = requests.get( "https://api.mailgun.net/v3/%s/events" % settings.ANYMAIL['MAILGUN_SENDER_DOMAIN'], auth=("api", settings.ANYMAIL['MAILGUN_API_KEY']), params={"begin": format_datetime(date), "ascending": "yes", "limit": limit, "pretty": "yes", }) print(r) if r.status_code != 200: print('r.content', r.content) return messages = r.json() try: print("len(messages['items'])", len(messages['items'])) no_attach = list(filter( lambda i: 'message' in i and i['message']['headers']['subject'] == subject and not len( i['message']['attachments']), messages['items'])) print("len(no_attach)", len(no_attach)) emails = [m['message']['headers']['to'] for m in no_attach] return emails, datetime.utcfromtimestamp(sorted(no_attach, key=lambda i: i['timestamp'], reverse=True)[0]['timestamp']) except Exception as e: print('r.content', r.content) print(e) class Command(BaseCommand): help = 'Get animail logs' def add_arguments(self, parser): # Named (optional) arguments parser.add_argument( '--limit', type=int, dest='limit', help='Limit', ) parser.add_argument( '--date', dest='date', help='Date', ) parser.add_argument( '--subject', dest='subject', help='Subject', ) def handle(self, *args, **options): emails = [] end_dt = datetime(2019, 7, 11) current_dt = options.get('date') while current_dt <= end_dt: e, current_dt = get_logs(options.get('limit'), current_dt, options.get('subject')) emails += e print(set(emails)) print(current_dt)