mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
imports optimization
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
from django.core.urlresolvers import reverse
|
||||
from modoboa.lib import events, parameters
|
||||
from modoboa.lib.webutils import static_url
|
||||
from modoboa.extensions import ModoExtension, exts_pool
|
||||
|
||||
class Webmail(ModoExtension):
|
||||
@@ -11,23 +10,23 @@ class Webmail(ModoExtension):
|
||||
version = "1.0"
|
||||
description = ugettext_lazy("Simple IMAP webmail")
|
||||
needs_media = True
|
||||
|
||||
|
||||
def load(self):
|
||||
parameters.register_app(uparams_opts=dict(needs_mailbox=True))
|
||||
|
||||
parameters.register_admin("IMAP_SERVER", type="string",
|
||||
|
||||
parameters.register_admin("IMAP_SERVER", type="string",
|
||||
deflt="127.0.0.1",
|
||||
help=ugettext_lazy("Address of your IMAP server"))
|
||||
parameters.register_admin("IMAP_SECURED", type="list_yesno",
|
||||
parameters.register_admin("IMAP_SECURED", type="list_yesno",
|
||||
deflt="no",
|
||||
help=ugettext_lazy("Use a secured connection to access IMAP server"))
|
||||
parameters.register_admin("IMAP_PORT", type="int", deflt="143",
|
||||
help=ugettext_lazy("Listening port of your IMAP server"))
|
||||
parameters.register_admin("SMTP_SERVER", type="string",
|
||||
parameters.register_admin("SMTP_SERVER", type="string",
|
||||
deflt="127.0.0.1",
|
||||
help=ugettext_lazy("Address of your SMTP server"))
|
||||
parameters.register_admin("SMTP_SECURED_MODE", type="list",
|
||||
values=[("none", ugettext_lazy("None")),
|
||||
parameters.register_admin("SMTP_SECURED_MODE", type="list",
|
||||
values=[("none", ugettext_lazy("None")),
|
||||
("starttls", "STARTTLS"),
|
||||
("ssl", "SSL/TLS")],
|
||||
deflt="none",
|
||||
@@ -39,7 +38,7 @@ class Webmail(ModoExtension):
|
||||
help=ugettext_lazy("Server needs authentication"))
|
||||
parameters.register_admin("MAX_ATTACHMENT_SIZE", type="int", deflt=2048,
|
||||
help=ugettext_lazy("Maximum attachment size in bytes (or KB, MB, GB if specified)"))
|
||||
|
||||
|
||||
parameters.register_user("MESSAGES_PER_PAGE", type="int", deflt=40,
|
||||
label=ugettext_lazy("Number of displayed emails per page"),
|
||||
help=ugettext_lazy("Sets the maximum number of messages displayed in a page"))
|
||||
@@ -101,7 +100,7 @@ def userlogout(request):
|
||||
password=request.session["password"])
|
||||
except Exception, e:
|
||||
return
|
||||
|
||||
|
||||
# The following statement may fail under Python 2.6...
|
||||
try:
|
||||
m.logout()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# coding: utf-8
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
@@ -9,7 +10,7 @@ class ComposeMailForm(forms.Form):
|
||||
subject = forms.CharField(label=_("Subject"), max_length=255, required=False)
|
||||
|
||||
origmsgid = forms.CharField(label="", widget=forms.HiddenInput(), required=False)
|
||||
|
||||
|
||||
class FolderForm(forms.Form):
|
||||
oldname = forms.CharField(label="", widget=forms.HiddenInput(), required=False)
|
||||
name = forms.CharField()
|
||||
|
||||
@@ -1,31 +1,30 @@
|
||||
# coding: utf-8
|
||||
|
||||
import sys, os
|
||||
import re
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
import email
|
||||
import lxml
|
||||
import chardet
|
||||
from django.core.files.uploadhandler import FileUploadHandler, StopUpload, SkipFile
|
||||
from django.http import HttpResponse
|
||||
|
||||
from django.core.files.uploadhandler import FileUploadHandler, SkipFile
|
||||
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
from django.conf import settings
|
||||
from modoboa.lib import u2u_decode, tables, imap_utf7, parameters
|
||||
from modoboa.lib.webutils import static_url, size2integer
|
||||
from modoboa.lib.connections import ConnectionsManager
|
||||
from modoboa.lib.email_listing import MBconnector, EmailListing
|
||||
from modoboa.lib.emailutils import *
|
||||
|
||||
import os
|
||||
import re
|
||||
from modoboa.lib import u2u_decode, tables, parameters
|
||||
from modoboa.lib.webutils import size2integer
|
||||
from modoboa.lib.email_listing import EmailListing
|
||||
from modoboa.lib.emailutils import *
|
||||
from imaputils import *
|
||||
from exceptions import *
|
||||
|
||||
|
||||
class WMtable(tables.Table):
|
||||
tableid = "emails"
|
||||
styles = "table-condensed"
|
||||
idkey = "imapid"
|
||||
select = tables.ImgColumn(
|
||||
"select", cssclass="draggable left", width="2%",
|
||||
"select", cssclass="draggable left", width="2%",
|
||||
defvalue="%spics/grippy.png" % settings.STATIC_URL,
|
||||
header="<input type='checkbox' name='toggleselect' id='toggleselect' />"
|
||||
)
|
||||
@@ -112,7 +111,7 @@ class ImapListing(EmailListing):
|
||||
deflocation = "INBOX/"
|
||||
defcallback = "wm_updatelisting"
|
||||
reset_wm_url = False
|
||||
|
||||
|
||||
def __init__(self, user, password, **kwargs):
|
||||
self.user = user
|
||||
self.mbc = IMAPconnector(user=user.username, password=password)
|
||||
@@ -165,7 +164,7 @@ class ImapEmail(Email):
|
||||
('Subject', True),
|
||||
]
|
||||
|
||||
def __init__(self, mbox, mailid, request, dformat="DISPLAYMODE", addrfull=False,
|
||||
def __init__(self, mbox, mailid, request, dformat="DISPLAYMODE", addrfull=False,
|
||||
links=0):
|
||||
mformat = parameters.get_user(request.user, "DISPLAYMODE")
|
||||
self.dformat = parameters.get_user(request.user, dformat)
|
||||
@@ -179,7 +178,7 @@ class ImapEmail(Email):
|
||||
self.mailid = mailid
|
||||
headers = msg['BODY[HEADER.FIELDS (%s)]' % self.headers_as_text]
|
||||
fallback_fmt = "html" if self.dformat == "plain" else "plain"
|
||||
|
||||
|
||||
self.bs = BodyStructure(msg['BODYSTRUCTURE'])
|
||||
data = None
|
||||
|
||||
@@ -206,7 +205,7 @@ class ImapEmail(Email):
|
||||
getattr(self, "viewmail_%s" % mformat)(bodyc, links=links)
|
||||
else:
|
||||
self.body = None
|
||||
|
||||
|
||||
self._find_attachments()
|
||||
|
||||
msg = email.message_from_string(headers)
|
||||
@@ -257,7 +256,7 @@ class ImapEmail(Email):
|
||||
att.has_key("disposition") and len(att["disposition"]) > 1:
|
||||
params = att["disposition"][1]
|
||||
key = "filename"
|
||||
|
||||
|
||||
if key and params:
|
||||
for pos, value in enumerate(params):
|
||||
if value == key:
|
||||
@@ -311,7 +310,7 @@ class Modifier(ImapEmail):
|
||||
def _modify_html(self):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
class ReplyModifier(Modifier):
|
||||
headernames = ImapEmail.headernames + \
|
||||
[("Reply-To", True),
|
||||
@@ -358,13 +357,13 @@ class ReplyModifier(Modifier):
|
||||
body += "\n"
|
||||
body += ">%s" % l
|
||||
self.body = body
|
||||
|
||||
|
||||
class ForwardModifier(Modifier):
|
||||
def __init__(self, mbox, mailid, request, form, **kwargs):
|
||||
super(ForwardModifier, self).__init__(
|
||||
mbox, mailid, request, dformat="EDITOR", **kwargs
|
||||
)
|
||||
|
||||
|
||||
self._header()
|
||||
form.fields["from_"].initial = request.user.username
|
||||
form.fields["subject"].initial = "Fwd: %s" % self.Subject
|
||||
@@ -488,7 +487,7 @@ def find_images_in_body(body):
|
||||
% (ct, os.path.basename(fname)))
|
||||
p["Content-Disposition"] = "inline"
|
||||
parts.append(p)
|
||||
|
||||
|
||||
return lxml.html.tostring(html), parts
|
||||
|
||||
def set_compose_session(request):
|
||||
@@ -557,7 +556,7 @@ def html2plaintext(content):
|
||||
if p is None:
|
||||
continue
|
||||
plaintext += p + "\n"
|
||||
|
||||
|
||||
return plaintext
|
||||
|
||||
def get_current_url(request):
|
||||
@@ -603,7 +602,7 @@ def send_mail(request, posturl=None):
|
||||
"""
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from forms import ComposeMailForm
|
||||
from modoboa.lib.webutils import getctx, ajax_simple_response, _render_to_string
|
||||
from modoboa.lib.webutils import _render_to_string
|
||||
from modoboa.auth.lib import get_password
|
||||
|
||||
form = ComposeMailForm(request.POST)
|
||||
@@ -623,13 +622,13 @@ def send_mail(request, posturl=None):
|
||||
submsg.attach(MIMEText(textbody.encode(charset),
|
||||
_subtype="plain", _charset=charset))
|
||||
body, images = find_images_in_body(body)
|
||||
submsg.attach(MIMEText(body.encode(charset), _subtype=editormode,
|
||||
submsg.attach(MIMEText(body.encode(charset), _subtype=editormode,
|
||||
_charset=charset))
|
||||
msg.attach(submsg)
|
||||
for img in images:
|
||||
msg.attach(img)
|
||||
else:
|
||||
text = MIMEText(body.encode(charset),
|
||||
text = MIMEText(body.encode(charset),
|
||||
_subtype=editormode, _charset=charset)
|
||||
if len(request.session["compose_mail"]["attachments"]):
|
||||
msg = MIMEMultipart()
|
||||
@@ -686,7 +685,7 @@ def send_mail(request, posturl=None):
|
||||
del request.session["compose_mail"]
|
||||
return True, dict(url=get_current_url(request))
|
||||
|
||||
listing = _render_to_string(request, "webmail/compose.html",
|
||||
listing = _render_to_string(request, "webmail/compose.html",
|
||||
{"form" : form, "noerrors" : True,
|
||||
"body" : request.POST["id_body"].strip(),
|
||||
"posturl" : posturl})
|
||||
@@ -698,19 +697,19 @@ class AttachmentUploadHandler(FileUploadHandler):
|
||||
Simple upload handler to limit the size of the attachments users
|
||||
can upload.
|
||||
"""
|
||||
|
||||
|
||||
def __init__(self, request=None):
|
||||
super(AttachmentUploadHandler, self).__init__(request)
|
||||
self.total_upload = 0
|
||||
self.toobig = False
|
||||
self.maxsize = size2integer(parameters.get_admin("MAX_ATTACHMENT_SIZE"))
|
||||
|
||||
|
||||
def receive_data_chunk(self, raw_data, start):
|
||||
self.total_upload += len(raw_data)
|
||||
if self.total_upload >= self.maxsize:
|
||||
self.toobig = True
|
||||
raise SkipFile()
|
||||
return raw_data
|
||||
|
||||
|
||||
def file_complete(self, file_size):
|
||||
return None
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
# coding: utf-8
|
||||
|
||||
from modoboa.lib.webutils import ajax_response, _render_error
|
||||
from modoboa.extensions.webmail.exceptions import *
|
||||
|
||||
@@ -10,6 +9,6 @@ class WebmailErrorMiddleware(object):
|
||||
json = request.GET.get("json", False) if request.method == "GET" \
|
||||
else request.POST.get("json", False)
|
||||
if json:
|
||||
return ajax_response(request, status="ko",
|
||||
return ajax_response(request, status="ko",
|
||||
respmsg=str(exception), norefresh=True)
|
||||
return _render_error(request, user_context=dict(error=str(exception)))
|
||||
|
||||
@@ -5,15 +5,13 @@ from django.utils.translation import ugettext as _
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.conf import settings
|
||||
from modoboa.extensions import webmail
|
||||
from modoboa.extensions.webmail.lib import IMAPheader
|
||||
from modoboa.extensions.webmail.imaputils import separate_mailbox
|
||||
from modoboa.lib import parameters
|
||||
from modoboa.lib.webutils import static_url
|
||||
|
||||
register = template.Library()
|
||||
|
||||
@register.simple_tag
|
||||
def viewmail_menu(selection, folder, user, mail_id=None):
|
||||
def viewmail_menu(selection, folder, user, mail_id=None):
|
||||
entries = [
|
||||
{"name" : "reply",
|
||||
"url" : "action=reply&mbox=%s&mailid=%s" % (folder, mail_id),
|
||||
@@ -34,21 +32,21 @@ def viewmail_menu(selection, folder, user, mail_id=None):
|
||||
{"name" : "display_options",
|
||||
"label" : _("Display options"),
|
||||
"menu" : [
|
||||
{"name" : "activate_links",
|
||||
{"name" : "activate_links",
|
||||
"label" : _("Activate links")},
|
||||
{"name" : "disable_links",
|
||||
{"name" : "disable_links",
|
||||
"label" : _("Disable links")}
|
||||
]
|
||||
}
|
||||
]
|
||||
menu = render_to_string('common/buttons_list.html',
|
||||
{"selection" : selection, "entries" : entries,
|
||||
menu = render_to_string('common/buttons_list.html',
|
||||
{"selection" : selection, "entries" : entries,
|
||||
"user" : user, "extraclasses" : "pull-left"})
|
||||
|
||||
entries = [{"name" : "close",
|
||||
"title" : _("Close this message"),
|
||||
"img" : "icon-remove"}]
|
||||
menu += render_to_string('common/buttons_list.html',
|
||||
menu += render_to_string('common/buttons_list.html',
|
||||
{"entries" : entries, "extraclasses" : "pull-right"})
|
||||
|
||||
return menu
|
||||
@@ -65,8 +63,8 @@ def compose_menu(selection, backurl, user):
|
||||
"img" : "icon-envelope",
|
||||
"label" : _("Send")},
|
||||
]
|
||||
return render_to_string('common/buttons_list.html',
|
||||
{"selection" : selection, "entries" : entries,
|
||||
return render_to_string('common/buttons_list.html',
|
||||
{"selection" : selection, "entries" : entries,
|
||||
"user" : user})
|
||||
|
||||
@register.simple_tag
|
||||
@@ -136,7 +134,7 @@ def print_mailboxes(tree, selected=None, withunseen=False, selectonly=False):
|
||||
ul_state = "hidden"
|
||||
div_state = "collapsed"
|
||||
result += "<div class='clickbox %s'></div>" % div_state
|
||||
|
||||
|
||||
cssclass = "block"
|
||||
extra_attrs = ""
|
||||
if withunseen and mbox.has_key("unseen"):
|
||||
@@ -148,7 +146,7 @@ def print_mailboxes(tree, selected=None, withunseen=False, selectonly=False):
|
||||
<i class="%s"></i>
|
||||
%s
|
||||
</a>
|
||||
""" % (mbox.has_key("path") and mbox["path"] or mbox["name"], cssclass,
|
||||
""" % (mbox.has_key("path") and mbox["path"] or mbox["name"], cssclass,
|
||||
'selectfolder' if selectonly else 'loadfolder', extra_attrs, iclass, label)
|
||||
if mbox.has_key("sub") and len(mbox["sub"]):
|
||||
result += "<ul name='%s' class='nav nav-list %s'>" % (mbox["path"], ul_state) \
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# coding: utf-8
|
||||
from django.conf.urls.defaults import *
|
||||
|
||||
urlpatterns = patterns(
|
||||
@@ -6,7 +7,7 @@ urlpatterns = patterns(
|
||||
(r'^submailboxes', "submailboxes"),
|
||||
(r'^getmailcontent', 'getmailcontent'),
|
||||
(r'^unseenmsgs', 'check_unseen_messages'),
|
||||
|
||||
|
||||
(r'^delete/$', 'delete'),
|
||||
(r'^move/$', "move"),
|
||||
(r'^mark/(?P<name>.+)/$', "mark"),
|
||||
@@ -15,8 +16,8 @@ urlpatterns = patterns(
|
||||
(r'^newfolder/$', "newfolder"),
|
||||
(r'^editfolder/$', 'editfolder'),
|
||||
(r'^delfolder/$', 'delfolder'),
|
||||
|
||||
|
||||
(r'^attachments/$', 'attachments'),
|
||||
(r'^delattachment/$', 'delattachment'),
|
||||
(r'^getattachment/$', 'getattachment'),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1,15 +1,12 @@
|
||||
# coding: utf-8
|
||||
from django.http import HttpResponse, Http404
|
||||
from django.http import HttpResponse
|
||||
from django.template import Template, Context
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from modoboa.lib import parameters
|
||||
from modoboa.lib.webutils import _render, _render_error, \
|
||||
getctx, _render_to_string, ajax_response, ajax_simple_response
|
||||
from modoboa.lib.email_listing import parse_search_parameters
|
||||
from modoboa.lib.webutils import _render, _render_to_string, ajax_response, ajax_simple_response
|
||||
from modoboa.lib.decorators import needs_mailbox
|
||||
from modoboa.auth.lib import *
|
||||
from lib import *
|
||||
from forms import *
|
||||
from templatetags import webextras
|
||||
@@ -18,7 +15,7 @@ from templatetags import webextras
|
||||
@needs_mailbox()
|
||||
def getattachment(request):
|
||||
"""Fetch a message attachment
|
||||
|
||||
|
||||
FIXME: par manque de caching, le bodystructure du message est
|
||||
redemandé pour accéder aux headers de cette pièce jointe.
|
||||
|
||||
@@ -30,7 +27,7 @@ def getattachment(request):
|
||||
pnum = request.GET.get("partnumber", None)
|
||||
if not mbox or not mailid or not pnum:
|
||||
raise WebmailError(_("Invalid request"))
|
||||
|
||||
|
||||
headers = {"Content-Type" : "text/plain",
|
||||
"Content-Transfer-Encoding" : None}
|
||||
imapc = get_imapconnector(request)
|
||||
@@ -51,7 +48,7 @@ def getattachment(request):
|
||||
resp["Content-Disposition"] = cd
|
||||
resp["Content-Length"] = partdef["size"]
|
||||
return resp
|
||||
|
||||
|
||||
@login_required
|
||||
@needs_mailbox()
|
||||
def move(request):
|
||||
@@ -115,11 +112,11 @@ def compact(request, name):
|
||||
@login_required
|
||||
@needs_mailbox()
|
||||
def newfolder(request, tplname="webmail/folder.html"):
|
||||
mbc = IMAPconnector(user=request.user.username,
|
||||
mbc = IMAPconnector(user=request.user.username,
|
||||
password=request.session["password"])
|
||||
ctx = {"title" : _("Create a new mailbox"),
|
||||
"formid" : "mboxform",
|
||||
"action" : reverse(newfolder),
|
||||
"action" : reverse(newfolder),
|
||||
"action_label" : _("Create"),
|
||||
"action_classes" : "submit",
|
||||
"withunseen" : False,
|
||||
@@ -134,11 +131,11 @@ def newfolder(request, tplname="webmail/folder.html"):
|
||||
return ajax_simple_response(dict(
|
||||
status="ok", respmsg=_("Mailbox created"), newmb=form.cleaned_data["name"], parent=pf
|
||||
))
|
||||
|
||||
|
||||
ctx["form"] = form
|
||||
ctx["selected"] = None
|
||||
return ajax_response(request, status="ko", template=tplname, **ctx)
|
||||
|
||||
|
||||
ctx["form"] = FolderForm()
|
||||
ctx["selected"] = None
|
||||
return _render(request, tplname, ctx)
|
||||
@@ -146,7 +143,7 @@ def newfolder(request, tplname="webmail/folder.html"):
|
||||
@login_required
|
||||
@needs_mailbox()
|
||||
def editfolder(request, tplname="webmail/folder.html"):
|
||||
mbc = IMAPconnector(user=request.user.username,
|
||||
mbc = IMAPconnector(user=request.user.username,
|
||||
password=request.session["password"])
|
||||
ctx = {"title" : _("Edit mailbox"),
|
||||
"formid" : "mboxform",
|
||||
@@ -197,7 +194,7 @@ def delfolder(request):
|
||||
name = request.GET.get("name", None)
|
||||
if name is None:
|
||||
raise WebmailError(_("Bad request"))
|
||||
mbc = IMAPconnector(user=request.user.username,
|
||||
mbc = IMAPconnector(user=request.user.username,
|
||||
password=request.session["password"])
|
||||
mbc.delete_folder(name)
|
||||
if request.session.has_key("mbox"):
|
||||
@@ -217,7 +214,7 @@ def attachments(request, tplname="webmail/attachments.html"):
|
||||
fobj = request.FILES["attachment"]
|
||||
tmpname = save_attachment(fobj)
|
||||
request.session["compose_mail"]["attachments"] \
|
||||
+= [{"fname" : str(fobj),
|
||||
+= [{"fname" : str(fobj),
|
||||
"content-type" : fobj.content_type,
|
||||
"size" : fobj.size,
|
||||
"tmpname" : os.path.basename(tmpname)}]
|
||||
@@ -287,7 +284,7 @@ def render_mboxes_list(request, imapc):
|
||||
def set_nav_params(request):
|
||||
if not request.session.has_key("navparams"):
|
||||
request.session["navparams"] = {}
|
||||
|
||||
|
||||
request.session["pageid"] = \
|
||||
int(request.GET.get("page", 1))
|
||||
if not request.GET.get("order", False):
|
||||
@@ -320,7 +317,7 @@ def listmailbox(request, defmailbox="INBOX", update_session=True):
|
||||
|
||||
lst = ImapListing(request.user, request.session["password"],
|
||||
baseurl="?action=listmailbox&mbox=%s&" % mbox,
|
||||
folder=mbox,
|
||||
folder=mbox,
|
||||
elems_per_page=int(parameters.get_user(request.user, "MESSAGES_PER_PAGE")),
|
||||
**request.session["navparams"])
|
||||
return lst.render(request, request.session["pageid"])
|
||||
@@ -348,7 +345,7 @@ def render_compose(request, form, posturl, email=None, insert_signature=False):
|
||||
attachments = request.session["compose_mail"]["attachments"]
|
||||
if len(attachments):
|
||||
short_att_list = "(%s)" \
|
||||
% ", ".join(map(lambda att: att["fname"],
|
||||
% ", ".join(map(lambda att: att["fname"],
|
||||
attachments[:2] + [{"fname" : "..."}] \
|
||||
if len(attachments) > 2 else attachments))
|
||||
else:
|
||||
@@ -412,7 +409,7 @@ def getmailcontent(request):
|
||||
raise WebmailError(_("Invalid request"))
|
||||
email = ImapEmail(mbox, mailid, request, links=int(request.GET["links"]))
|
||||
return _render(request, "common/viewmail.html", {
|
||||
"headers" : email.render_headers(folder=mbox, mail_id=mailid),
|
||||
"headers" : email.render_headers(folder=mbox, mail_id=mailid),
|
||||
"folder" : mbox, "imapid" : mailid, "mailbody" : email.body if email.body else ""
|
||||
})
|
||||
|
||||
@@ -484,7 +481,7 @@ def index(request):
|
||||
if action is not None:
|
||||
if not globals().has_key(action):
|
||||
raise WebmailError(_("Undefined action"))
|
||||
response = globals()[action](request)
|
||||
response = globals()[action](request)
|
||||
else:
|
||||
if request.is_ajax():
|
||||
raise WebmailError(_("Bad request"))
|
||||
@@ -499,11 +496,11 @@ def index(request):
|
||||
response["refreshrate"] = \
|
||||
int(parameters.get_user(request.user, "REFRESH_INTERVAL"))
|
||||
response["quota"] = ImapListing.computequota(imapc)
|
||||
response["ro_mboxes"] = ["INBOX", "Junk",
|
||||
response["ro_mboxes"] = ["INBOX", "Junk",
|
||||
parameters.get_user(request.user, "SENT_FOLDER"),
|
||||
parameters.get_user(request.user, "TRASH_FOLDER"),
|
||||
parameters.get_user(request.user, "DRAFTS_FOLDER")]
|
||||
|
||||
|
||||
return _render(request, "webmail/index.html", response)
|
||||
|
||||
if action in ["reply", "forward"]:
|
||||
|
||||
Reference in New Issue
Block a user