0

我可以从 Gmail 服务器接收邮件并在我的 Android 项目的列表视图上显示主题。昨天,我开始将邮件的图像视图更改为“未读”或“已读”情况。但是,后来我意识到,当我的应用程序连接到 Gmail 服务器并接收我的邮件时,RECENT 邮件变成了 SEEN 邮件。由于这个原因,我无法为未读邮件设置我的图像视图。

我是说; 我想从 Gmail 服务器接收我的邮件,而不改变他们在 Gmail 服务器上的情况。我想在服务器中收到 3 个未读和 4 个已读。

我应该怎么做?

我的连接代码示例是:

public Message[] ConnectionToServer(String email, String password)
            throws Exception 
        {
        Properties props = System.getProperties();
        props.setProperty("mail.imaps.partialfetch", "false");
        URLName server = new URLName("imaps://" + email + ":" + password + "@imap.gmail.com/INBOX");
        Session session = Session.getDefaultInstance(props, null);
        folder = session.getFolder(server);

        if (folder == null) 
        {
            System.exit(0);
        }
        folder.open(Folder.READ_WRITE);     
        messages = folder.getMessages();

        for (int i = messages.length - 1; i >= 23; i--) 
        {
            Part p = messages[i]; 

            subject = messages[i].getSubject();

                     if (messages[i].isSet(Flags.Flag.RECENT)) {
            isSet = true;
            System.out.println("Recent");
            isSetlist.add(String.valueOf(isSet));
        }
        if (messages[i].isSet(Flags.Flag.SEEN)) 
        {
            isSet = false;
            System.out.println("Read");
            isSetlist.add(String.valueOf(isSet));
        }
        else
        {
            isSet = true;
            System.out.println("Recent");
            isSetlist.add(String.valueOf(isSet));
        }

                        body = getText(p);

            list.add(body);
        }
        return (Message[]) messages;
    }

我在 getText() 方法中使用 getContent

public String getText(Part p) throws MessagingException, IOException {

        if (p.isMimeType("text/*")) {
            boolean textIsHtml = false;
            String s = (String) p.getContent();

            textIsHtml = p.isMimeType("text/html");
            return String.valueOf(s);
        }

        if (p.isMimeType("multipart/alternative")) {
            // prefer html text over plain text
            Multipart mp = (Multipart) p.getContent();
            String text = null;
            for (int i = 0; i < mp.getCount(); i++) {
                Part bp = mp.getBodyPart(i);
                if (bp.isMimeType("text/plain")) {
                    if (text == null)
                        text = getText(bp);
                    continue;
                } else if (bp.isMimeType("text/html")) {
                    String s = getText(bp);
                    if (s != null)
                        return String.valueOf(s);
                } else {
                    return getText(bp);
                }
            }
            return text;
        } else if (p.isMimeType("multipart/*")) {
            Multipart mp = (Multipart) p.getContent();
            for (int i = 0; i < mp.getCount(); i++) {
                String s = getText(mp.getBodyPart(i));
                if (s != null)
                    return String.valueOf(s);
            }
        }

        return null;
    }
4

2 回答 2

0

如果您不需要进行任何修改,请尝试以 READONLY 模式打开文件夹 - 或者,尝试在调用之间保留Message 标志。getContent

于 2012-05-16T18:41:00.697 回答
0

在访问内容之前访问消息标志(以确定消息是否可见)。访问内容通常会设置 SEEN 标志。

于 2012-05-16T19:38:06.487 回答