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
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
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,
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