mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
- Ticket #50
- Headers have been added to messages sent by MailNG (send/reply), they are now more compliant with RFC 2822
This commit is contained in:
@@ -217,23 +217,32 @@ class IMAPconnector(object):
|
||||
result[name] = None
|
||||
return result
|
||||
|
||||
def _add_flag(self, folder, mail_id, flag):
|
||||
self.m.select(self._encodefolder(folder), True)
|
||||
self.m.store(mail_id, "+FLAGS", flag)
|
||||
|
||||
def msg_unread(self, folder, msgset):
|
||||
self.m.select(self._encodefolder(folder), True)
|
||||
self.m.store(msgset, "-FLAGS", "\\Seen")
|
||||
|
||||
def msg_read(self, folder, msgset):
|
||||
self.m.select(self._encodefolder(folder), True)
|
||||
self.m.store(msgset, "+FLAGS", "\\Seen")
|
||||
self._add_flag(folder, msgset, "\\Seen")
|
||||
|
||||
def msgforwarded(self, folder, imapid):
|
||||
self.m.select(self._encodefolder(folder), True)
|
||||
self.m.store(imapid, "+FLAGS", "$Forwarded")
|
||||
self._add_flag(folder, imapid, "$Forwarded")
|
||||
|
||||
def msg_answered(self, folder, imapid):
|
||||
self._add_flag(folder, imapid, "\\Answered")
|
||||
|
||||
def move(self, msgset, oldfolder, newfolder):
|
||||
self.m.select(self._encodefolder(oldfolder), True)
|
||||
self.m.copy(msgset, newfolder)
|
||||
self.m.store(msgset, "+FLAGS", "\\Deleted")
|
||||
|
||||
def push_mail(self, folder, msg):
|
||||
now = imaplib.Time2Internaldate(time.time())
|
||||
self.m.append(self._encodefolder(folder), '\\Seen', now, str(msg))
|
||||
|
||||
def empty(self, folder):
|
||||
self.m.select(self._encodefolder(folder))
|
||||
typ, data = self.m.search(None, 'ALL')
|
||||
|
||||
@@ -215,10 +215,11 @@ def render_compose(request, form, posturl, bodyheader=None, body=None):
|
||||
ctx = getctx("ok", level=2, menu=menu, listing=content)
|
||||
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
|
||||
|
||||
def send_mail(request, withctx=False):
|
||||
def send_mail(request, withctx=False, origmsg=None):
|
||||
form = ComposeMailForm(request.POST)
|
||||
if form.is_valid():
|
||||
from email.mime.text import MIMEText
|
||||
from email.utils import make_msgid, formatdate
|
||||
import smtplib
|
||||
|
||||
msg = MIMEText(request.POST["id_body"].encode("utf-8"),
|
||||
@@ -226,6 +227,11 @@ def send_mail(request, withctx=False):
|
||||
msg["Subject"] = request.POST["subject"]
|
||||
msg["From"] = request.POST["from_"]
|
||||
msg["To"] = request.POST["to"]
|
||||
msg["Message-ID"] = make_msgid()
|
||||
msg["User-Agent"] = "MailNG"
|
||||
msg["Date"] = formatdate()
|
||||
if origmsg and origmsg.has_key("Message-ID"):
|
||||
msg["References"] = msg["In-Reply-To"] = origmsg["Message-ID"]
|
||||
rcpts = msg['To'].split(',')
|
||||
if "cc" in request.POST.keys():
|
||||
msg["Cc"] = request.POST["cc"]
|
||||
@@ -234,8 +240,7 @@ def send_mail(request, withctx=False):
|
||||
s = smtplib.SMTP(parameters.get("webmail", "SMTP_SERVER"))
|
||||
if parameters.get("webmail", "SMTP_SECURED") == "yes":
|
||||
s.starttls()
|
||||
#except (smtplib.SMTPException, ssl.SSLError), error:
|
||||
except Exception, e:
|
||||
except (smtplib.SMTPException, ssl.SSLError), error:
|
||||
print error
|
||||
# Prévoir la remontée de cette erreur au niveau du client!!
|
||||
|
||||
@@ -243,6 +248,7 @@ def send_mail(request, withctx=False):
|
||||
s.login(request.user.username, request.session["password"])
|
||||
s.sendmail(msg['From'], rcpts, msg.as_string())
|
||||
s.quit()
|
||||
IMAPconnector(request).push_mail("Sent", msg)
|
||||
ctx = getctx("ok", url=__get_current_url(request))
|
||||
else:
|
||||
ctx = getctx("ko", level=2, listing=render_to_string("webmail/compose.html",
|
||||
@@ -262,9 +268,12 @@ def compose(request):
|
||||
|
||||
@login_required
|
||||
def reply(request, folder, mail_id):
|
||||
if request.method == "POST":
|
||||
return send_mail(request)
|
||||
msg = fetchmail(request, folder, mail_id, True)
|
||||
if request.method == "POST":
|
||||
ctx, r = send_mail(request, True, origmsg=msg)
|
||||
if ctx["status"] == "ok":
|
||||
IMAPconnector(request).msg_answered(folder, mail_id)
|
||||
return r
|
||||
email = ImapEmail(msg, True)
|
||||
lines = email.body.split('\n')
|
||||
body = ""
|
||||
|
||||
@@ -278,7 +278,9 @@ ul.visible {
|
||||
|
||||
$$("a[name=fdaction]").addEvent("click", function(evt) {
|
||||
evt.stop();
|
||||
current_anchor.parse_string(evt.target.get("href"), true).update();
|
||||
new Request.JSON({url : evt.target.get("href"),
|
||||
onSuccess : get_callback("folder")
|
||||
}).get();
|
||||
});
|
||||
|
||||
$$("tbody>tr").each(function(item) {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import time
|
||||
import re
|
||||
import os
|
||||
import time, random, hashlib
|
||||
from email.header import decode_header
|
||||
import lxml
|
||||
import lxml.html
|
||||
|
||||
Reference in New Issue
Block a user