from email.utils import format_datetime import requests from datetime import datetime, timedelta 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 in format 22-1-2019', ) parser.add_argument( '--days', type=int, dest='days', help='Days after date', ) parser.add_argument( '--subject', dest='subject', help='Subject', ) def handle(self, *args, **options): emails = [] current_dt = datetime.strptime(options.get('date'), '%d-%m-%Y') end_dt = current_dt + timedelta(options.get('days') or 1) while current_dt <= end_dt: e, dt = get_logs(options.get('limit') or 300, current_dt, options.get('subject')) emails += e if current_dt == dt: break current_dt = dt print(set(emails)) print(current_dt)