mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
@@ -392,7 +392,6 @@ class AccountFormGeneral(forms.ModelForm):
|
||||
self.fields["is_active"].label = _("Enabled")
|
||||
self.user = user
|
||||
if user.group == "DomainAdmins":
|
||||
#del self.fields["role"]
|
||||
self.fields["role"] = forms.CharField(
|
||||
label="",
|
||||
widget=forms.HiddenInput, required=False
|
||||
@@ -443,11 +442,6 @@ class AccountFormGeneral(forms.ModelForm):
|
||||
if self.cleaned_data["password1"] != "":
|
||||
account.set_password(self.cleaned_data["password1"])
|
||||
account.save()
|
||||
# role = None
|
||||
# if "role" in self.cleaned_data:
|
||||
# role = self.cleaned_data["role"]
|
||||
# elif self.user.group == "DomainAdmins" and self.user != account:
|
||||
# role = "SimpleUsers"
|
||||
account.set_role(self.cleaned_data["role"])
|
||||
return account
|
||||
|
||||
|
||||
@@ -228,6 +228,14 @@ class User(AbstractBaseUser, PermissionsMixin):
|
||||
def enabled(self):
|
||||
return self.is_active
|
||||
|
||||
@property
|
||||
def encoded_address(self):
|
||||
from email.header import Header
|
||||
if self.first_name != "" or self.last_name != "":
|
||||
return "%s <%s>" % \
|
||||
(Header(self.fullname, 'utf8').encode(), self.email)
|
||||
return self.email
|
||||
|
||||
def belongs_to_group(self, name):
|
||||
"""Simple shortcut to check if this user is a member of a
|
||||
specific group.
|
||||
@@ -816,13 +824,6 @@ class Mailbox(DatesAware):
|
||||
def full_address(self):
|
||||
return self.__full_address(self.address)
|
||||
|
||||
@property
|
||||
def name_and_address(self):
|
||||
if self.user.first_name != "" or self.user.last_name != "":
|
||||
return "%s %s <%s>" % \
|
||||
(self.user.first_name, self.user.last_name, self.full_address)
|
||||
return self.full_address
|
||||
|
||||
@property
|
||||
def enabled(self):
|
||||
return self.user.is_active
|
||||
|
||||
@@ -32,7 +32,7 @@ def send_autoreply(sender, mailbox, armessage):
|
||||
lastar.armessage = armessage
|
||||
lastar.sender = sender
|
||||
|
||||
sendmail_simple(mailbox.name_and_address, sender, armessage.subject,
|
||||
sendmail_simple(mailbox.user.encoded_address, sender, armessage.subject,
|
||||
armessage.content.encode('utf-8'))
|
||||
|
||||
lastar.last_sent = datetime.datetime.now()
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
import email
|
||||
from email.utils import parseaddr
|
||||
from email.header import Header
|
||||
import lxml
|
||||
import chardet
|
||||
|
||||
@@ -18,7 +16,9 @@ from modoboa.lib.webutils import size2integer
|
||||
from modoboa.lib.email_listing import EmailListing
|
||||
from modoboa.extensions.webmail.exceptions import WebmailError
|
||||
from modoboa.extensions.webmail.imaputils import IMAPconnector, get_imapconnector, BodyStructure
|
||||
from modoboa.lib.emailutils import EmailAddress, Email
|
||||
from modoboa.lib.emailutils import (
|
||||
EmailAddress, Email, prepare_addresses, set_email_headers
|
||||
)
|
||||
|
||||
|
||||
class WMtable(tables.Table):
|
||||
@@ -611,25 +611,6 @@ def create_mail_attachment(attdef):
|
||||
return res
|
||||
|
||||
|
||||
def prepare_addresses(addresses, usage="header"):
|
||||
"""Prepare addresses before using them
|
||||
|
||||
:param list addresses: a list of addresses
|
||||
:param string usage: how those addresses are going to be used
|
||||
:return: a string or a list depending on usage value
|
||||
"""
|
||||
result = []
|
||||
for address in addresses.split(','):
|
||||
name, addr = parseaddr(address)
|
||||
if name and usage == "header":
|
||||
result.append("%s <%s>" % (Header(name, 'utf8').encode(), addr))
|
||||
else:
|
||||
result.append(addr)
|
||||
if usage == "header":
|
||||
return ",".join(result)
|
||||
return result
|
||||
|
||||
|
||||
def send_mail(request, posturl=None):
|
||||
"""Email verification and sending.
|
||||
|
||||
@@ -650,7 +631,6 @@ def send_mail(request, posturl=None):
|
||||
editormode = parameters.get_user(request.user, "EDITOR")
|
||||
if form.is_valid():
|
||||
from email.mime.text import MIMEText
|
||||
from email.utils import make_msgid, formatdate
|
||||
import smtplib
|
||||
|
||||
body = request.POST["id_body"]
|
||||
@@ -680,18 +660,11 @@ def send_mail(request, posturl=None):
|
||||
for attdef in request.session["compose_mail"]["attachments"]:
|
||||
msg.attach(create_mail_attachment(attdef))
|
||||
|
||||
msg["Subject"] = Header(form.cleaned_data["subject"], 'utf8')
|
||||
if request.user.first_name != "" or request.user.last_name != "":
|
||||
fromaddress = "%s <%s>" % (Header(request.user.fullname, 'utf8').encode(),
|
||||
request.user.email)
|
||||
else:
|
||||
fromaddress = request.user.email
|
||||
msg["From"] = fromaddress
|
||||
msg["To"] = prepare_addresses(form.cleaned_data["to"])
|
||||
msg["Message-ID"] = make_msgid()
|
||||
msg["User-Agent"] = "Modoboa"
|
||||
msg["Date"] = formatdate(time.time(), True)
|
||||
if form.cleaned_data.has_key("origmsgid"):
|
||||
set_email_headers(
|
||||
msg, form.cleaned_data["subject"], request.user.encoded_address,
|
||||
form.cleaned_data['to']
|
||||
)
|
||||
if "origmsgid" in form.cleaned_data:
|
||||
msg["References"] = msg["In-Reply-To"] = form.cleaned_data["origmsgid"]
|
||||
rcpts = prepare_addresses(form.cleaned_data["to"], "envelope")
|
||||
for hdr in ["cc", "cci"]:
|
||||
|
||||
@@ -7,7 +7,7 @@ from django.template.loader import render_to_string
|
||||
from django.conf import settings
|
||||
import u2u_decode
|
||||
import smtplib
|
||||
from email.header import decode_header
|
||||
from email.header import Header, decode_header
|
||||
from email.mime.text import MIMEText
|
||||
from email.utils import make_msgid, formatdate, parseaddr
|
||||
import time
|
||||
@@ -214,6 +214,39 @@ def decode(s, encodings=('utf8', 'latin1', 'windows-1252', 'ascii'), charset=Non
|
||||
pass
|
||||
return s.decode('ascii', 'ignore')
|
||||
|
||||
|
||||
def prepare_addresses(addresses, usage="header"):
|
||||
"""Prepare addresses before using them
|
||||
|
||||
:param list addresses: a list of addresses
|
||||
:param string usage: how those addresses are going to be used
|
||||
:return: a string or a list depending on usage value
|
||||
"""
|
||||
result = []
|
||||
for address in addresses.split(','):
|
||||
name, addr = parseaddr(address)
|
||||
if name and usage == "header":
|
||||
result.append("%s <%s>" % (Header(name, 'utf8').encode(), addr))
|
||||
else:
|
||||
result.append(addr)
|
||||
if usage == "header":
|
||||
return ",".join(result)
|
||||
return result
|
||||
|
||||
|
||||
def set_email_headers(msg, subject, sender, rcpt):
|
||||
"""Set mandatory headers.
|
||||
|
||||
Subject, From, To, Message-ID, User-Agent, Date
|
||||
"""
|
||||
msg["Subject"] = Header(subject, 'utf8')
|
||||
msg["From"] = sender
|
||||
msg["To"] = prepare_addresses(rcpt)
|
||||
msg["Message-ID"] = make_msgid()
|
||||
msg["User-Agent"] = "Modoboa"
|
||||
msg["Date"] = formatdate(time.time(), True)
|
||||
|
||||
|
||||
def __sendmail(sender, rcpt, msgstring, server='localhost', port=25):
|
||||
"""Message sending
|
||||
|
||||
@@ -250,12 +283,7 @@ def sendmail_simple(sender, rcpt, subject="Sample message", content="", **kwargs
|
||||
:return: tuple
|
||||
"""
|
||||
msg = MIMEText(content, _charset='utf-8')
|
||||
msg["Subject"] = subject
|
||||
msg["From"] = sender
|
||||
msg["To"] = rcpt
|
||||
msg["Message-ID"] = make_msgid()
|
||||
msg["Date"] = formatdate(time.time(), True)
|
||||
|
||||
set_email_headers(msg, subject, sender, rcpt)
|
||||
return __sendmail(sender, rcpt, msg.as_string(), **kwargs)
|
||||
|
||||
def sendmail_fromfile(sender, rcpt, fname):
|
||||
|
||||
Reference in New Issue
Block a user