Object content = mp.getContent();
Object content = Mime.getMessageContent(mp);
    void getStructure(PrintStream ps, MimePart mp, boolean extensions) throws IOException, MessagingException {        ps.write('(');        ContentType ct = new ContentType(mp.getContentType());        String primary = nATOM(ct.getPrimaryType()), subtype = nATOM(ct.getSubType());        if (primary.equals("\"MULTIPART\"")) {            // 7.4.2: "Multiple parts are indicated by parenthesis nesting.  Instead of a body type            //         as the first element of the parenthesized list, there is a sequence of one            //         or more nested body structures.  The second element of the parenthesized            //         list is the multipart subtype (mixed, digest, parallel, alternative, etc.)."            MimeMultipart multi = (MimeMultipart) mp.getContent();            for (int i = 0; i < multi.getCount(); i++)                getStructure(ps, (MimePart) multi.getBodyPart(i), extensions);            ps.write(' ');  ps.print(subtype);            if (extensions)                ;   // FIXME: not implementing BODYSTRUCTURE extensions yet        } else {            // 7.4.2: "The basic fields of a non-multipart body part are in the following order:            //         body type, body subtype, body parameter parenthesized list, body id, body            //         description, body encoding, body size."            String cte = mp.getEncoding();            cte = (cte == null || cte.trim().equals("") ? "7bit" : cte);            boolean rfc822 = primary.equals("\"MESSAGE\"") && subtype.equals("\"RFC822\"");            aSTRING(ps, ct.getPrimaryType());  ps.write(' ');  aSTRING(ps, ct.getSubType());  ps.write(' ');            ParameterList pl = ct.getParameterList();            boolean first = true;            if (pl != null) {                for (Enumeration en = pl.getNames(); en.hasMoreElements(); first = false) {                    String name = (String) en.nextElement();                    ps.print(first ? '(' : ' ');  aSTRING(ps, name);  ps.write(' ');  astring(ps, pl.get(name));                }            }            ps.print(first ? "NIL" : ")");            ps.write(' ');  nstring(ps, mp.getContentID());            ps.write(' ');  nstring(ps, mp.getDescription());            ps.write(' ');  aSTRING(ps, cte);            ps.write(' ');  ps.print(Math.max(mp.getSize(), 0));            if (rfc822) {                // 7.4.2: "A body type of type MESSAGE and subtype RFC822 contains, immediately                //         after the basic fields, the envelope structure, body structure, and                //         size in text lines of the encapsulated message."                Object content = mp.getContent();                ps.write(' ');  getEnvelope(ps, (MimeMessage) content);                ps.write(' ');  getStructure(ps, (MimePart) content, extensions);            }            if (rfc822 || primary.equals("\"TEXT\"")) {                // 7.4.2: "A body type of type TEXT contains, immediately after the basic fields, the                //         size of the body in text lines.  Note that this size is the size in its                //         content transfer encoding and not the resulting size after any decoding."                // FIXME: JavaMail's implementation of this always returns -1                ps.write(' ');  ps.print(Math.max(mp.getLineCount(), 0));            }            if (extensions && !rfc822)                ;   // FIXME: not implementing BODYSTRUCTURE extensions yet        }        ps.write(')');    }