Пример #1
0
def __handleText(view, mimePart, parentMIMEContainer, bodyBuffer, counter, buf, level):
    subtype = mimePart.get_content_subtype()

    if verbose():
        __trace("text/%s" % subtype, buf, level)

    """Get the attachment data"""
    body = mimePart.get_payload(decode=1)

    size = len(body)

    charset = mimePart.get_content_charset(constants.DEFAULT_CHARSET)
    lang    = mimePart.get("Content-language")

    if subtype == "plain" or subtype == "rfc822-headers":
        #XXX: Will want to leverage the language to aid the GUI layer
        size > 0 and bodyBuffer.append(getUnicodeValue(body, charset))

    else:
        mimeText = Mail.MIMEText(view=view)

        mimeText.mimeType = mimePart.get_content_type()
        mimeText.charset  = charset
        mimeText.filesize = len(body)
        mimeText.filename = __getFileName(mimePart, counter)

        if lang:
            mimeText.lang = lang

        #XXX: This may cause issues since Note no longer a parent
        mimeText.body = utils.unicodeToText(mimeText, "body", getUnicodeValue(body, charset), \
                                        indexText=False)

        parentMIMEContainer.mimeParts.append(mimeText)
        parentMIMEContainer.hasMimeParts = True
Пример #2
0
def messageObjectToKind(view, messageObject, messageText=None):
    """
    This method converts a email message string to
    a Chandler C{Mail.MailMessage} object

    @param messageObject: A C{email.Message} object representation of a mail message
    @type messageObject: C{email.Message}
    @return: C{Mail.MailMessage}
    """

    assert isinstance(messageObject, Message.Message), \
           "messageObject must be a Python email.Message.Message instance"

    assert len(messageObject.keys()) > 0, \
           "messageObject data is not a valid RFC2882 message"

    assert messageText is None or isinstance(messageText, str), \
           "messageText can either be a string or None"

    m = Mail.MailMessage(view=view)

    """Save the original message text in a text blob"""
    if messageText is None:
        messageText = messageObject.as_string()

    m.rfc2822Message = utils.dataToBinary(m, "rfc2822Message", messageText, \
                                          'message/rfc822', 'bz2')

    counter = utils.Counter()
    bodyBuffer = []
    buf = None

    if verbose():
        if messageObject.has_key("Message-ID"):
            messageId = messageObject["Message-ID"]
        else:
            messageId = "<Unknown Message>"

        buf = ["Message: %s\n-------------------------------" % messageId]

    __parsePart(view, messageObject, m, bodyBuffer, counter, buf)

    """If the message has attachments set hasMimeParts to True"""
    if len(m.mimeParts) > 0:
        m.hasMimeParts = True

    body = (constants.LF.join(bodyBuffer)).replace(constants.CR, constants.EMPTY)

    m.body = utils.unicodeToText(m, "body", body, indexText=False)

    __parseHeaders(view, messageObject, m)

    if verbose():
        logging.warn("\n\n%s\n\n" % '\n'.join(buf))

    return m