예제 #1
0
def mail_update_view(request):
    mail = get_object_or_404(Mail.my_mails(request.user),
                             pk=request.POST['mail_id'])
    saved_dues = Due.objects.filter(mail=mail).values_list('id', flat=True)
    edited_dues = []

    dues = request.POST.lists()

    for due in dues:
        if due[0] == 'due-new':
            for dt in due[1]:
                if dt:
                    d = Due(mail=mail, due=dt)
                    d.save()
                    edited_dues.append(d.id)
                else:
                    messages.error(request, 'Please fill out the due date.')
        else:
            try:
                due_id = int(re.sub(r'due-', '', due[0]))
                d = Due.objects.get(mail=mail, pk=due_id)
                d.due = due[1][0]
                d.save()
                edited_dues.append(due_id)
            except:
                pass

    for saved_due in saved_dues:
        if saved_due not in edited_dues:
            d = Due.objects.get(mail=mail, pk=saved_due)
            d.delete()

    return HttpResponseRedirect('/mails/')
예제 #2
0
def mail_update_view(request):
    mail = get_object_or_404(Mail.my_mails(request.user), pk=request.POST["mail_id"])
    saved_dues = Due.objects.filter(mail=mail).values_list("id", flat=True)
    edited_dues = []

    dues = request.POST.lists()

    for due in dues:
        if due[0] == "due-new":
            for dt in due[1]:
                if dt:
                    parsed_due_date = dateparser.parse(
                        dt, settings=settings.DATEPARSER_SETTINGS
                    )
                    d = Due(mail=mail, due=parsed_due_date)
                    d.save()
                    edited_dues.append(d.id)
                else:
                    messages.error(request, "Please fill out the due date.")
        else:
            try:
                due_id = int(re.sub(r"due-", "", due[0]))
            except ValueError:
                continue
            d = mail.dues.get(pk=due_id)
            d.due = dateparser.parse(due[1][0], settings=settings.DATEPARSER_SETTINGS)
            d.save()
            edited_dues.append(due_id)

    for saved_due in saved_dues:
        if saved_due not in edited_dues:
            d = Due.objects.get(mail=mail, pk=saved_due)
            d.delete()

    return HttpResponseRedirect("/mails/")
예제 #3
0
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("/")
예제 #4
0
def download_calendar_view(request, secret):
    username = base64.urlsafe_b64decode(secret.encode('utf-8'))
    user = User.objects.get(username=username)
    dues = Due.objects.filter(mail__in=Mail.my_mails(user))
    cal = Calendar()
    cal.add('prodid', '-//rmd.io Events Calendar//%s//EN' % settings.SITE_URL)
    cal.add('version', '2.0')

    for due in dues:
        event = Event()
        event.add('summary', '%s [rmd.io]' %
                  tools.calendar_clean_subject(due.mail.subject))
        event.add('description', '%s/mails/' % settings.SITE_URL)
        event.add('dtstart', due.due)
        event.add('dtend', due.due)
        cal.add_component(event)

    response = HttpResponse(content=cal.to_ical(), content_type='text/calendar')
    response['Content-Disposition'] = 'attachment; filename=maildelay.ics'

    return response
예제 #5
0
def download_calendar_view(request, secret):
    username = base64.urlsafe_b64decode(secret).decode("utf-8")
    user = User.objects.get(username=username)
    dues = Due.objects.filter(mail__in=Mail.my_mails(user))
    cal = Calendar()
    cal.add("prodid", "-//rmd.io Events Calendar//%s//EN" % settings.SITE_URL)
    cal.add("version", "2.0")

    for due in dues:
        event = Event()
        event.add(
            "summary", "%s [rmd.io]" % tools.calendar_clean_subject(due.mail.subject)
        )
        event.add("description", "%s/mails/" % settings.SITE_URL)
        event.add("dtstart", due.due)
        event.add("dtend", due.due)
        cal.add_component(event)

    response = HttpResponse(content=cal.to_ical(), content_type="text/calendar")
    response["Content-Disposition"] = "attachment; filename=maildelay.ics"

    return response
예제 #6
0
def mail_delete_confirm_view(request, id):
    mail = get_object_or_404(Mail.my_mails(request.user), pk=id)
    return render(request, 'mails/mail_delete_confirm.html', {'mail': mail})
예제 #7
0
def mail_info_view(request, id):
    mail = get_object_or_404(Mail.my_mails(request.user), pk=id)
    return render(request, 'mails/mail_info.html', {'mail': mail})
예제 #8
0
 def get_queryset(self):
     if self.request.user.is_authenticated():
         mails = Mail.my_mails(self.request.user)
         return sorted(mails, key=lambda m: m.next_due().due)
예제 #9
0
파일: views.py 프로젝트: tsec0/project
def create_mail(request, pk=None):
    mail = Mail()
    if pk:
        mail.receiver = UserProfile.objects.get(pk=pk)
        mail.sender = request.user.username
    return persist_mail(request, mail, 'mail_create')  # Mail create template
예제 #10
0
파일: import.py 프로젝트: trowik/rmd.io
    def import_mail(self, message):

        if message.msg["Message-ID"] in self.imported_mail_ids:
            message.delete()
            return

        sender = "<unknown>"

        try:
            sender = message.get_sender()
            recipients = message.get_recipients()
            subject = message.get_subject()
            sent_date = message.get_sent_date()
            delay_addresses = tools.get_delay_addresses_from_recipients(
                recipients)
            keys = [
                tools.get_key_from_email_address(x) for x in delay_addresses
            ]
        except Exception as e:
            message.delete()
            logger.error("Mail from %s deleted: Failed to parse header, %s" %
                         (sender, e.args[0]))

            return

        try:
            user = User.objects.get(email=sender, is_active=True)
            account = user.get_account()
        except:
            message.delete()
            logger.error("Mail from %s deleted: User not registered" % sender)
            tools.send_registration_mail(sender)

            return

        if message_deleted_due_to_invalid_keys(keys=keys,
                                               sender=sender,
                                               message=message,
                                               account=account):
            return

        try:
            mail = Mail(subject=subject, sent=sent_date, user=user)
            mail.save()

            save_received_statistic(delay_addresses=delay_addresses,
                                    mail=mail,
                                    sent_date=sent_date)

            user_stat = Statistic(
                type="USER",
                email=user.email,
            )
            user_stat.save()

            save_oblivious_statistic(recipients=recipients,
                                     mail=mail,
                                     delay_addresses=delay_addresses)

            message.flag(mail.id)
            self.imported_mail_ids.append(message.msg["Message-ID"])
        except Exception as e:
            message.delete()
            logger.error("Mail from %s deleted: Could not save mail" % sender)
            logger.error(e)

            return
예제 #11
0
파일: import.py 프로젝트: JohnL17/rmd.io
    def import_mail(self, message):

        if message.msg['Message-ID'] in self.imported_mail_ids:
            message.delete()
            return

        try:
            sender = message.get_sender()
            recipients = message.get_recipients()
            subject = message.get_subject()
            sent_date = message.get_sent_date()
            delay_addresses = tools.get_delay_addresses_from_recipients(
                recipients)
            keys = [
                tools.get_key_from_email_address(x) for x in delay_addresses
            ]
        except Exception as e:
            message.delete()
            logger.error('Mail from %s deleted: Failed to parse header, %s' %
                         (sender, e.args[0]))

            return

        try:
            user = User.objects.get(email=sender, is_active=True)
            account = user.get_account()
        except:
            message.delete()
            logger.error('Mail from %s deleted: User not registered' % sender)
            tools.send_registration_mail(sender)

            return

        if account.anti_spam:
            if not len(keys):
                message.delete()
                logger.error('Mail from %s deleted: No key' % sender)
                tools.send_wrong_recipient_mail(sender)

                return
            elif not any(key == account.key for key in keys):
                message.delete()
                logger.error('Mail from %s deleted: Wrong key' % sender)

                return

        try:
            mail = Mail(subject=subject, sent=sent_date, user=user)
            mail.save()
            for delay_address in delay_addresses:
                rec_stat = Statistic(type='REC',
                                     email=re.sub(
                                         r'(^\d+[dmw])(\.[0-9a-z]{10})', r'\1',
                                         delay_address))
                due = Due(
                    mail=mail,
                    due=sent_date + datetime.timedelta(
                        tools.get_delay_days_from_email_address(delay_address))
                )
                due.save()
                rec_stat.save()
            user_stat = Statistic(
                type='USER',
                email=user.email,
            )
            user_stat.save()

            for rec in recipients:
                recipient = Recipient(mail=mail,
                                      email=rec['email'],
                                      name=rec['name'])
                recipient.save()
                if rec['email'] not in delay_addresses:
                    obl_stat = Statistic(type='OBL', email=rec['email'])
                    obl_stat.save()
                else:
                    continue

            message.flag(mail.id)
            self.imported_mail_ids.append(message.msg['Message-ID'])
        except:
            message.delete()
            logger.error('Mail from %s deleted: Could not save mail' % sender)

            return