You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

74 lines
2.4 KiB

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)