1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-09 22:38:19 +02:00
This commit is contained in:
Md. Shafikul Islam 2023-05-18 10:40:04 +06:00 committed by GitHub
commit 8f7327ca08
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 10 deletions

View file

@ -6,6 +6,11 @@ from django_mailbox.models import Mailbox
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('-mb', '--mailboxes', type=str, nargs='+', help='Write mailbox names')
parser.add_argument('-mr', '--max_read', type=int,
help='Write maximum number of email to read from each mailbox')
def handle(self, *args, **options):
logging.basicConfig(level=logging.INFO)
Mailbox.get_new_mail_all_mailboxes(args)
Mailbox.get_new_mail_all_mailboxes(options)

View file

@ -446,15 +446,19 @@ class Mailbox(models.Model):
save=False
)
def get_new_mail(self, condition=None):
def get_new_mail(self, condition=None, max_read=None):
"""Connect to this transport and fetch new messages."""
new_mail = []
connection = self.get_connection()
if not connection:
return
for message in connection.get_message(condition):
if max_read is not None and max_read <= 0:
break
msg = self.process_incoming_message(message)
if not msg is None:
if msg is not None:
if max_read is not None:
max_read -= 1
yield msg
self.last_polling = now()
if django.VERSION >= (1, 5): # Django 1.5 introduces update_fields
@ -463,18 +467,18 @@ class Mailbox(models.Model):
self.save()
@staticmethod
def get_new_mail_all_mailboxes(args=None):
def get_new_mail_all_mailboxes(options: dict):
mailboxes = Mailbox.active_mailboxes.all()
if args:
if options.get('mailboxes'):
mailboxes = mailboxes.filter(
name=' '.join(args)
name__in=options['mailboxes']
)
for mailbox in mailboxes:
logger.info(
'Gathering messages for %s',
mailbox.name
)
messages = mailbox.get_new_mail()
messages = mailbox.get_new_mail(max_read=options.get('max_read'))
for message in messages:
logger.info(
'Received %s (from %s)',

View file

@ -20,11 +20,11 @@ Using a cron job
----------------
You can easily consume incoming mail by running the management command named
``getmail`` (optionally with an argument of the name of the mailbox you'd like
to get the mail for).::
``getmail`` (optionally with an argument of the name(s) of the mailbox(es) you'd like
to get the mail for. You can also pass maximum number of email count to read).::
python manage.py getmail
python manage.py getmail --mailboxes mailbox1 mailbox2 --max_read 10
.. _receiving-mail-from-exim4-or-postfix: