diff --git a/apps/notification/management/commands/animail_logs.py b/apps/notification/management/commands/animail_logs.py index 6070bc25..57bac50f 100644 --- a/apps/notification/management/commands/animail_logs.py +++ b/apps/notification/management/commands/animail_logs.py @@ -1,6 +1,35 @@ +from email.utils import format_datetime +import requests +from datetime import datetime + from django.core.management.base import BaseCommand from django.conf import settings -import requests + + +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' @@ -13,7 +42,7 @@ class Command(BaseCommand): dest='limit', help='Limit', ) - '''parser.add_argument( + parser.add_argument( '--date', dest='date', help='Date', @@ -22,30 +51,15 @@ class Command(BaseCommand): '--subject', dest='subject', help='Subject', - )''' + ) def handle(self, *args, **options): - print('MAILGUN_API_KEY', settings.ANYMAIL['MAILGUN_API_KEY']) - print('MAILGUN_SENDER_DOMAIN', settings.ANYMAIL['MAILGUN_SENDER_DOMAIN']) - r = requests.get( - "https://api.mailgun.net/v3/%s/events" % settings.ANYMAIL['MAILGUN_SENDER_DOMAIN'], - auth=("api", settings.ANYMAIL['MAILGUN_API_KEY']), - params={"begin": "Wed, 10 Jul 19 00:00:00 +0000", #options.get('date') - "ascending": "yes", - "limit": options.get('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: i['message']['headers']['subject'] == 'Грамота от Lil School' and not len( #options.get('subject') - i['message']['attachments']), messages['items'])) - print("len(no_attach)", len(no_attach)) - print([m['message']['headers']['to'] for m in no_attach]) - except Exception as e: - print('r.content', r.content) - raise e + 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)