From 6adbc5c6beef1fbf8f418a02c6a3f1472a886cce Mon Sep 17 00:00:00 2001 From: tonio Date: Wed, 5 May 2010 13:18:12 +0200 Subject: [PATCH] Ticket #45. --- admin/forms.py | 1 + extensions/amavis_quarantine/main.py | 6 +++--- extensions/amavis_quarantine/sql_listing.py | 20 +++++++++++++++++++- extensions/webmail/imap_listing.py | 17 +++++++++++++++-- extensions/webmail/templates/headers.html | 13 ++++++------- lib/email_listing.py | 13 ++----------- static/stylesheets/box.css | 10 ++++++++++ templates/admin/mailboxes.html | 2 +- templates/common/mailheaders.html | 7 +++++++ 9 files changed, 64 insertions(+), 25 deletions(-) create mode 100644 templates/common/mailheaders.html diff --git a/admin/forms.py b/admin/forms.py index 38a907c2e..3d7e03f57 100644 --- a/admin/forms.py +++ b/admin/forms.py @@ -45,6 +45,7 @@ class AliasForm(forms.ModelForm): del kwargs["domain"] super(AliasForm, self).__init__(*args, **kwargs) self.fields['address'].widget.attrs['size'] = 14 + self.fields['mbox'].widget.attrs['size'] = 5 if domain: self.fields['mbox'].queryset = Mailbox.objects.filter(domain=domain.id) diff --git a/extensions/amavis_quarantine/main.py b/extensions/amavis_quarantine/main.py index 6baa63471..bdd7fe29d 100644 --- a/extensions/amavis_quarantine/main.py +++ b/extensions/amavis_quarantine/main.py @@ -115,7 +115,7 @@ def index(request, message=None): @login_required def getmailcontent(request, mail_id): - from mailng.lib.email_listing import Email + from sql_listing import SQLemail conn = db.getconnection("amavis_quarantine") status, cursor = db.execute(conn, """ @@ -129,9 +129,9 @@ WHERE quarantine.mail_id='%s' msg = email.message_from_string(content) links = request.GET.has_key("links") and request.GET["links"] or "0" mode = request.GET.has_key("mode") and request.GET["mode"] or "plain" - mail = Email(msg, mode, links) + mail = SQLemail(msg, mode, links) return _render(request, "common/viewmail.html", { - "headers" : "", + "headers" : mail.render_headers(), "mailbody" : mail.body, "pre" : mail.pre }) diff --git a/extensions/amavis_quarantine/sql_listing.py b/extensions/amavis_quarantine/sql_listing.py index fed58ffa9..25c3b7a2e 100644 --- a/extensions/amavis_quarantine/sql_listing.py +++ b/extensions/amavis_quarantine/sql_listing.py @@ -3,7 +3,7 @@ from datetime import datetime from django.utils.translation import ugettext as _ from mailng.lib import tables, db -from mailng.lib.email_listing import MBconnector, EmailListing +from mailng.lib.email_listing import MBconnector, EmailListing, Email class Qtable(tables.Table): tableid = "emails" @@ -92,3 +92,21 @@ class SQLlisting(EmailListing): def __init__(self, filter, **kwargs): self.mbc = SQLconnector(filter) EmailListing.__init__(self, **kwargs) + +class SQLemail(Email): + def __init__(self, msg, *args, **kwargs): + Email.__init__(self, msg, *args, **kwargs) + fields = ["X-Amavis-Alert", "Subject", "From", "To", "Date"] + for f in fields: + label = f + if not msg.has_key(f): + f = f.upper() + if not msg.has_key(f): + self.headers += [{"name" : label, "value" : ""}] + continue + self.headers += [{"name" : label, "value" : msg[f]}] + try: + label = re.sub("-", "_", label) + setattr(self, label, msg[f]) + except: + pass diff --git a/extensions/webmail/imap_listing.py b/extensions/webmail/imap_listing.py index ee1ceb946..cc891af67 100644 --- a/extensions/webmail/imap_listing.py +++ b/extensions/webmail/imap_listing.py @@ -349,8 +349,8 @@ class ImapListing(EmailListing): self.mbc.criterions = ["(%s)" % criterions] class ImapEmail(Email): - def __init__(self, msg, addrfull=False, **kwargs): - Email.__init__(self, msg, **kwargs) + def __init__(self, msg, addrfull=False, *args, **kwargs): + Email.__init__(self, msg, *args, **kwargs) fields = ["Subject", "From", "To", "Reply-To", "Cc", "Date"] for f in fields: @@ -371,3 +371,16 @@ class ImapEmail(Email): except: pass + def render_headers(self, **kwargs): + attachments = [] + for part in self.attachments: + decoded = decode_header(part.get_filename()) + if decoded[0][1] is None: + attachments += [decoded[0][0]] + else: + attachments += [unicode(decoded[0][0], decoded[0][1])] + return render_to_string("webmail/headers.html", { + "headers" : self.headers, + "folder" : kwargs["folder"], "mail_id" : kwargs["mail_id"], + "attachments" : attachments != [] and attachments or None + }) diff --git a/extensions/webmail/templates/headers.html b/extensions/webmail/templates/headers.html index 213b8a759..11d702132 100644 --- a/extensions/webmail/templates/headers.html +++ b/extensions/webmail/templates/headers.html @@ -1,9 +1,8 @@ +{% extends "common/mailheaders.html" %} {% load i18n %} - - {% for hdr in headers %} - - {% endfor %} - {% if attachments %} + +{% block extraheaders %} +{% if attachments %} - {% endif %} -
{{ hdr.name }}{{ hdr.value }}
{% trans "Attachments" %} @@ -13,5 +12,5 @@ {% endfor %}
+{% endif %} +{% endblock %} diff --git a/lib/email_listing.py b/lib/email_listing.py index c24a547b6..ad7cefa67 100644 --- a/lib/email_listing.py +++ b/lib/email_listing.py @@ -187,18 +187,9 @@ class Email(object): return map[m.group(1)] return url - def render_headers(self, folder, mail_id): - attachments = [] - for part in self.attachments: - decoded = decode_header(part.get_filename()) - if decoded[0][1] is None: - attachments += [decoded[0][0]] - else: - attachments += [unicode(decoded[0][0], decoded[0][1])] - return render_to_string("webmail/headers.html", { + def render_headers(self, **kwargs): + return render_to_string("common/mailheaders.html", { "headers" : self.headers, - "folder" : folder, "mail_id" : mail_id, - "attachments" : attachments != [] and attachments or None }) def render(self, request): diff --git a/static/stylesheets/box.css b/static/stylesheets/box.css index 6b1331ce6..57cc9d5c6 100644 --- a/static/stylesheets/box.css +++ b/static/stylesheets/box.css @@ -26,11 +26,21 @@ input { padding: 2px; } +input[type=text] { + width: 130px +} + input:hover { color: inherit; background-color: #ffffcc; } +select { + width: 135px; + background-color: #eee; + border: 1px solid #cccccc; +} + td.odd { background: #F7F9Fb; } diff --git a/templates/admin/mailboxes.html b/templates/admin/mailboxes.html index e1751923f..f0c49ee7c 100644 --- a/templates/admin/mailboxes.html +++ b/templates/admin/mailboxes.html @@ -32,7 +32,7 @@ {% url admin.views.newalias domain.id mb.id as alias_url %} + rel="{handler:'iframe',size:{x:300,y:250}}"> {% url mbox-aliases domain.id mb.id as aliases_url %} diff --git a/templates/common/mailheaders.html b/templates/common/mailheaders.html new file mode 100644 index 000000000..3085afd34 --- /dev/null +++ b/templates/common/mailheaders.html @@ -0,0 +1,7 @@ +{% load i18n %} + + {% for hdr in headers %} + + {% endfor %} + {% block extraheaders %}{% endblock %} +
{{ hdr.name }}{{ hdr.value }}