def mail_delete_view(request): mail_id = request.POST.get('id') mail = get_object_or_404(Mail.my_mails(request.user), pk=mail_id) imap_conn = imaphelper.get_connection() imap_mail = imaphelper.IMAPMessage.from_dbid(mail_id, imap_conn) mail.delete() imap_mail.delete() return HttpResponseRedirect("/")
def handle(self, *args, **kwargs): # Do not run more often than every 30 seconds has_recent_import = ImportLog.objects.filter( date__gt=timezone.now() - datetime.timedelta(seconds=30)).exists() if has_recent_import: return ImportLog.objects.create() # Now - import (new) mails imap_conn = imaphelper.get_connection() messages = imaphelper.get_unflagged(imap_conn) for message in messages: self.import_mail(message) imap_conn.expunge() logger.info("Importing new emails finished")
def handle(self, *args, **kwargs): lock = FileLock('/tmp/lockfile.tmp') with lock: last_import, created = ImportLog.objects.get_or_create() import_diff = timezone.now() - last_import.date if import_diff > datetime.timedelta(seconds=30): last_import.save() else: return imap_conn = imaphelper.get_connection() messages = imaphelper.get_unflagged(imap_conn) for message in messages: self.import_mail(message) imap_conn.expunge()
def handle(self, *args, **kwargs): dues = Due.objects.filter(due__lte=timezone.now()) for due in dues: mail = due.mail imap_conn = imaphelper.get_connection() try: message = imaphelper.IMAPMessage.from_dbid(mail.id, imap_conn) except IndexError: logger.warning( "Imap message of mail {} could not be found".format( mail.id)) mail.delete() return recipients = mail.recipient_set tpl = get_template("mails/messages/mail_attachment.txt") text = tpl.render({"recipients": recipients}) try: send_email_with_attachments(message=message, mail=mail, text=text) except: message.delete() print("Failed to write new header") break stats = Statistic(type="SENT", email=mail.user.email, date=timezone.now()) stats.save() due.delete() if not mail.due_set.count(): message.delete() mail.delete()
def handle(self, *args, **kwargs): try: smtp = smtplib.SMTP(settings.EMAIL_HOST) smtp.starttls() smtp.login(settings.EMAIL_HOST_USER, settings.EMAIL_HOST_PASSWORD) except: return dues = Due.objects.filter(due__lte=timezone.now()) for due in dues: mail = due.mail imap_conn = imaphelper.get_connection() try: message = imaphelper.IMAPMessage.from_dbid(mail.id, imap_conn) except IndexError: mail.delete() logger.warning( 'Imap message of mail {} could not be found'.format( mail.id)) return charset = message.msg.get_content_charset() recipients = mail.recipient_set tpl = get_template('mails/messages/mail_attachment.txt') text = tpl.render({'recipients': recipients}) if message.msg.is_multipart(): add_text = MIMEText(text, 'plain', 'utf-8') if message.msg.get_content_maintype == 'multipart/signed': # If it's a signed message, only take first payload msg = MIMEMultipart() orig = message.msg.get_payload(0) msg.attach(orig) msg.attach(add_text) else: msg = MIMEMultipart() msg.attach(message.msg) msg.attach(add_text) else: msg = MIMEText( '\n\n'.join((message.msg.get_payload(), str(text))), 'plain', charset) try: for i in message.msg.walk(): if i.get_content_maintype() == 'text': content = i.get_payload(decode=True) break attachments = [] for part in msg.walk(): if part.get_content_maintype() == 'multipart': continue if part.get('Content-Disposition') is None: continue attachments.append(part) email = EmailMessage( "Reminder from {}: {}".format( mail.sent.strftime('%b %d %H:%M'), mail.subject), content.decode("utf-8") + text, settings.EMAIL_HOST_USER, [mail.user.email], ) for attachment in attachments: email.attach(attachment.get_filename(), attachment.get_payload(decode=True), attachment.get_content_type()) email.send() except: message.delete() print('Failed to write new header') break stats = Statistic(type='SENT', email=mail.user.email, date=timezone.now()) stats.save() due.delete() if not mail.due_set.count(): message.delete() mail.delete() smtp.quit()