Exemplo n.º 1
0
    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)

        self.headers = []
        self.attachments = {}
        self.imapc = get_imapconnector(request)
        msg = self.imapc.fetchmail(mbox, mailid, readonly=False, headers=self.headers_as_list)
        self.mbox = mbox
        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

        mformat = self.dformat if self.bs.contents.has_key(self.dformat) else fallback_fmt

        if len(self.bs.contents):
            bodyc = u""
            for part in self.bs.contents[mformat]:
                pnum = part["pnum"]
                data = self.imapc._cmd("FETCH", mailid, "(BODY.PEEK[%s])" % pnum)
                content = decode_payload(part["encoding"], data[int(mailid)]["BODY[%s]" % pnum])
                charset = self._find_content_charset(part)
                if charset is not None:
                    try:
                        content = content.decode(charset)
                    except (UnicodeDecodeError, LookupError):
                        result = chardet.detect(content)
                        content = content.decode(result["encoding"])
                bodyc += content

            self._fetch_inlines()
            self.body = getattr(self, "viewmail_%s" % mformat)(bodyc, links=links)
        else:
            self.body = None

        self._find_attachments()

        msg = email.message_from_string(headers)
        for hdr in self.headernames:
            label = hdr[0]
            name = hdr[0]
            if not name in msg.keys():
                name = name.upper()
                if not name in msg.keys():
                    continue
            try:
                key = re.sub("-", "_", name).lower()
                value = getattr(IMAPheader, "parse_%s" % key)(msg[name], full=addrfull)
            except AttributeError:
                value = msg[name]
            if hdr[1]:
                self.headers += [{"name": label, "value": value}]
            try:
                label = re.sub("-", "_", label)
                setattr(self, label, value)
            except:
                pass
Exemplo n.º 2
0
    def userfolders(self, request):
        from modoboa.extensions.webmail.imaputils import get_imapconnector

        mbc = get_imapconnector(request)
        ret = mbc.getmboxes(request.user, unseen_messages=False)

        folders = self.__build_folders_list(ret, request.user, mbc)
        return folders
Exemplo n.º 3
0
    def userfolders(self, request):
        from modoboa.extensions.webmail.imaputils import get_imapconnector

        mbc = get_imapconnector(request)
        ret = mbc.getmboxes(request.user, unseen_messages=False)

        folders = self.__build_folders_list(ret, request.user, mbc)
        return folders
Exemplo n.º 4
0
    try:
        active_script, scripts = sc.listscripts()
    except Error, e:
        return _render_error(request, user_context={"error": e})

    if active_script is None:
        active_script = ""
        default_script = "%s/" % scripts[0] if len(scripts) else ""
    else:
        default_script = "%s/" % active_script
    return render(request, tplname, {
        "selection": "user",
        "active_script": active_script,
        "default_script": default_script,
        "scripts": sorted(scripts),
        "hdelimiter": get_imapconnector(request).hdelimiter
    })


@login_required
@needs_mailbox()
def get_templates(request, ftype):
    if ftype == "condition":
        return ajax_simple_response(FilterForm([], [], request).cond_templates)
    return ajax_simple_response(FilterForm([], [], request).action_templates)


@login_required
@needs_mailbox()
def getfs(request, name):
    sc = SieveClient(user=request.user.username,
Exemplo n.º 5
0
    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)

        self.headers = []
        self.attachments = {}
        self.imapc = get_imapconnector(request)
        msg = self.imapc.fetchmail(mbox,
                                   mailid,
                                   readonly=False,
                                   headers=self.headers_as_list)
        self.mbox = mbox
        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

        mformat = self.dformat if self.bs.contents.has_key(
            self.dformat) else fallback_fmt

        if len(self.bs.contents):
            bodyc = u''
            for part in self.bs.contents[mformat]:
                pnum = part['pnum']
                data = self.imapc._cmd("FETCH", mailid,
                                       "(BODY.PEEK[%s])" % pnum)
                content = decode_payload(part['encoding'],
                                         data[int(mailid)]['BODY[%s]' % pnum])
                charset = self._find_content_charset(part)
                if charset is not None:
                    try:
                        content = content.decode(charset)
                    except (UnicodeDecodeError, LookupError):
                        result = chardet.detect(content)
                        content = content.decode(result['encoding'])
                bodyc += content

            self._fetch_inlines()
            self.body = \
                getattr(self, "viewmail_%s" % mformat)(bodyc, links=links)
        else:
            self.body = None

        self._find_attachments()

        msg = email.message_from_string(headers)
        for hdr in self.headernames:
            label = hdr[0]
            name = hdr[0]
            if not name in msg.keys():
                name = name.upper()
                if not name in msg.keys():
                    continue
            try:
                key = re.sub("-", "_", name).lower()
                value = getattr(IMAPheader, "parse_%s" % key)(msg[name],
                                                              full=addrfull)
            except AttributeError:
                value = msg[name]
            if hdr[1]:
                self.headers += [{"name": label, "value": value}]
            try:
                label = re.sub("-", "_", label)
                setattr(self, label, value)
            except:
                pass