Ejemplo n.º 1
0
 def _parse_headers(self, lines):
     # Passed a list of lines that make up the headers for the current msg
     lastheader = ''
     lastvalue = []
     for lineno, line in enumerate(lines):
         # Check for continuation
         if line[0] in ' \t':
             if not lastheader:
                 # The first line of the headers was a continuation.  This
                 # is illegal, so let's note the defect, store the illegal
                 # line, and ignore it for purposes of headers.
                 defect = errors.FirstHeaderLineIsContinuationDefect(line)
                 self._cur.defects.append(defect)
                 continue
             lastvalue.append(line)
             continue
         if lastheader:
             # XXX reconsider the joining of folded lines
             lhdr = EMPTYSTRING.join(lastvalue)[:-1].rstrip('\r\n')
             self._cur[lastheader] = lhdr
             lastheader, lastvalue = '', []
         # Check for envelope header, i.e. unix-from
         if line.startswith('From '):
             if lineno == 0:
                 # Strip off the trailing newline
                 mo = NLCRE_eol.search(line)
                 if mo:
                     line = line[:-len(mo.group(0))]
                 self._cur.set_unixfrom(line)
                 continue
             elif lineno == len(lines) - 1:
                 # Something looking like a unix-from at the end - it's
                 # probably the first line of the body, so push back the
                 # line and stop.
                 self._input.unreadline(line)
                 return
             else:
                 # Weirdly placed unix-from line.  Note this as a defect
                 # and ignore it.
                 defect = errors.MisplacedEnvelopeHeaderDefect(line)
                 self._cur.defects.append(defect)
                 continue
         # Split the line on the colon separating field name from value.
         i = line.find(':')
         if i < 0:
             defect = errors.MalformedHeaderDefect(line)
             self._cur.defects.append(defect)
             continue
         lastheader = line[:i]
         lastvalue = [line[i + 1:].lstrip()]
     # Done with all the lines, so handle the last header.
     if lastheader:
         # XXX reconsider the joining of folded lines
         self._cur[lastheader] = EMPTYSTRING.join(lastvalue).rstrip('\r\n')
Ejemplo n.º 2
0
    def _parse_headers(self, lines):
        lastheader = ''
        lastvalue = []
        for lineno, line in enumerate(lines):
            if line[0] in ' \t':
                if not lastheader:
                    defect = errors.FirstHeaderLineIsContinuationDefect(line)
                    self._cur.defects.append(defect)
                    continue
                lastvalue.append(line)
                continue
            if lastheader:
                lhdr = EMPTYSTRING.join(lastvalue)[:-1].rstrip('\r\n')
                self._cur[lastheader] = lhdr
                lastheader, lastvalue = '', []
            if line.startswith('From '):
                if lineno == 0:
                    mo = NLCRE_eol.search(line)
                    if mo:
                        line = line[:-len(mo.group(0))]
                    self._cur.set_unixfrom(line)
                    continue
                else:
                    if lineno == len(lines) - 1:
                        self._input.unreadline(line)
                        return
                    defect = errors.MisplacedEnvelopeHeaderDefect(line)
                    self._cur.defects.append(defect)
                    continue
            i = line.find(':')
            if i < 0:
                defect = errors.MalformedHeaderDefect(line)
                self._cur.defects.append(defect)
                continue
            lastheader = line[:i]
            lastvalue = [line[i + 1:].lstrip()]

        if lastheader:
            self._cur[lastheader] = EMPTYSTRING.join(lastvalue).rstrip('\r\n')