def parse_mail(fileobj):
    headers, body = {}, []
    msg = email.message_from_file(fileobj)

    for k, v in msg.items():
        headers[k] = quoted_printable(v).replace('\n', '').replace('\t', ' ').strip()

    for line in email.Iterators.body_line_iterator(msg):
        line = unicode(line, 'utf-8', 'replace').replace('\n', '')
        body.append(line)

    # Merge lines joined with "=\n"
    i = len(body) - 1
    while i > 0:
        i -= 1
        prev = body[i]
        if len(prev) == 74 and prev.endswith('='):
            body[i] = body[i][:-1] + body[i + 1]
            del body[i + 1]

    # Remove =20 from end of lines
    i = 0
    while i < len(body):
        if body[i].endswith('=20'):
            body[i] = body[i][:-3] + ' '
        i += 1

    return headers, body
예제 #2
0
def parse_mail(fileobj):
    headers, body = {}, []
    msg = email.message_from_binary_file(fileobj)

    for k, v in msg.items():
        headers[k] = quoted_printable(v).replace('\n',
                                                 '').replace('\t',
                                                             ' ').strip()

    for line in email.iterators.body_line_iterator(msg):
        body.append(line.replace("\n", ""))

    # Merge lines joined with "=\n"
    i = len(body) - 1
    while i > 0:
        i -= 1
        prev = body[i]
        if len(prev) == 74 and prev.endswith('='):
            body[i] = body[i][:-1] + body[i + 1]
            del body[i + 1]

    # Remove =20 from end of lines
    i = 0
    while i < len(body):
        if body[i].endswith('=20'):
            body[i] = body[i][:-3] + ' '
        i += 1

    return headers, body
    def parse(headers, body, **kwargs):
        if headers.get('List-Id', '') not in lists:
            return

        mapping = {
            'Source': 'package',
            'Version': 'version',
            'Distribution': 'distribution',
            'Urgency': 'urgency',
            'Changed-By': 'by',
            'Closes': 'closes',
            'Maintainer': 'maintainer'
        }

        msg = AcceptedUploadMessage()
        for line in body:
            for field, target in mapping.iteritems():
                if line.startswith('%s: ' % field):
                    val = line[len(field) + 2:]
                    setattr(msg, target, val)
                    del mapping[field]
                    break

            # If we have found all the fields, stop looking
            if len(mapping) == 0:
                break

        if msg.by:
            msg.by = format_email_address(quoted_printable(msg.by))

        try:
            if msg.closes:
                msg.closes = [int(x) for x in msg.closes.split(' ')]
        except ValueError:
            return

        if msg.urgency:
            msg.urgency = msg.urgency.lower()

        if msg.maintainer:
            msg.maintainer = format_email_address(quoted_printable(msg.by))

        if 'new_queue' in kwargs:
            new_queue = kwargs['new_queue']
            msg.new_upload = new_queue.is_new(msg.package, msg.version)

        return msg
예제 #4
0
    def parse(headers, body, **kwargs):
        if headers.get('List-Id', '') not in lists:
            return

        mapping = {
            'Source': 'package',
            'Version': 'version',
            'Distribution': 'distribution',
            'Urgency': 'urgency',
            'Changed-By': 'by',
            'Closes': 'closes',
            'Maintainer': 'maintainer'
        }

        msg = AcceptedUploadMessage()
        for line in body:
            for field, target in mapping.iteritems():
                if line.startswith('%s: ' % field):
                    val = line[len(field) + 2:]
                    setattr(msg, target, val)
                    del mapping[field]
                    break

            # If we have found all the fields, stop looking
            if len(mapping) == 0:
                break

        if msg.by:
            msg.by = format_email_address(quoted_printable(msg.by))

        try:
            if msg.closes:
                msg.closes = [int(x) for x in msg.closes.split(' ')]
        except ValueError:
            return

        if msg.urgency:
            msg.urgency = msg.urgency.lower()

        if msg.maintainer:
            msg.maintainer = format_email_address(quoted_printable(msg.by))

        if 'new_queue' in kwargs:
            new_queue = kwargs['new_queue']
            msg.new_upload = new_queue.is_new(msg.package, msg.version)

        return msg
    def parse(headers, body, **kwargs):
        if headers.get("List-Id", "") not in lists:
            return

        mapping = {
            "Source": "package",
            "Version": "version",
            "Distribution": "distribution",
            "Urgency": "urgency",
            "Changed-By": "by",
            "Closes": "closes",
            "Maintainer": "maintainer",
        }

        msg = AcceptedUploadMessage()
        for line in body:
            for field, target in mapping.items():
                if line.startswith("%s: " % field):
                    val = line[len(field) + 2:]
                    setattr(msg, target, val)
                    del mapping[field]
                    break

            # If we have found all the fields, stop looking
            if len(mapping) == 0:
                break

        if msg.by:
            msg.by = format_email_address(quoted_printable(msg.by))

        try:
            if msg.closes:
                msg.closes = [int(x) for x in msg.closes.split(" ")]
        except ValueError:
            return

        if msg.urgency:
            msg.urgency = msg.urgency.lower()

        if "new_queue" in kwargs:
            new_queue = kwargs["new_queue"]
            msg.new_upload = new_queue.is_new(
                msg.package, msg.version) or new_queue.is_backports_new(
                    msg.package, msg.version)

        return msg
    def parse(headers, body):
        if headers.get('List-Id', '') not in ('<debian-devel-changes.lists.debian.org>',
            '<debian-backports-changes.lists.debian.org>'):
            return

        msg = AcceptedUploadMessage()

        mapping = {
            'Source': 'package',
            'Version': 'version',
            'Distribution': 'distribution',
            'Urgency': 'urgency',
            'Changed-By': 'by',
            'Closes': 'closes',
        }

        for line in body:
            for field, target in mapping.iteritems():
                if line.startswith('%s: ' % field):
                    val = line[len(field) + 2:]
                    setattr(msg, target, val)
                    del mapping[field]
                    break

            # If we have found all the fields, stop looking
            if len(mapping) == 0:
                break

        if msg.by:
            msg.by = format_email_address(quoted_printable(msg.by))

        try:
            if msg.closes:
                msg.closes = [int(x) for x in msg.closes.split(' ')]
        except ValueError:
            return

        if msg.urgency:
            msg.urgency = msg.urgency.lower()

        return msg