0

I am writing a demo to learn IMAP command. When I fetched the header, the server returns the "date" and "from" fields to my input stream. But checking the result in the terminal, I find that some fields of the mail header are Unicode(like ?gb2312?B?zfjS19PDu6fW0NDE?) or BASE64 strings. So how can I translate them to standard encoding?

This is my code:

import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;

import java.io.*;
import java.net.Socket;

/**
 * Created by joelchen on 2016/12/7.
 */
public class APP {
    public static Socket Client = null;
    public static BufferedReader inFormServer = null;
    public static DataOutputStream toServer = null;

    public static void connect() throws IOException{
        Client = new Socket(host,143);
        inFormServer = new BufferedReader(new InputStreamReader(Client.getInputStream()));
        toServer = new DataOutputStream(Client.getOutputStream());
        //str = inFormServer.readLine();
        //System.out.println(str);
        if(Client != null && inFormServer != null && toServer != null){
            toServer.writeBytes("a001 login user pass\n");
            toServer.writeBytes("a002 select inbox\n");
            //toServer.writeBytes("a003 SEARCH UNSEEN UNDELETED\n");
            toServer.writeBytes("A654 FETCH 1:10 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])\n");
            toServer.writeBytes("a005 LOGOUT\n");
            String answer;
            while((answer = inFormServer.readLine()) != null){
                System.out.println("Server :" + answer);
                //*if(answer.indexOf("OK") != -1){
                //break;
            }
        }
    }
}

The result I got:

Server :* FLAGS (\Answered \Seen \Deleted \Draft \Flagged)
Server :* OK [PERMANENTFLAGS (\Answered \Seen \Deleted \Draft \Flagged)] Limited
Server :a002 OK [READ-WRITE] SELECT completed
Server :* 1 FETCH (FLAGS (\Seen) BODY[HEADER.FIELDS (DATE FROM)] {104}
Server :Date: Tue, 8 Nov 2016 21:10:27 +0800
Server :From: =?UTF-8?B?5paw5rWq5b6u5Y2a?= <message@service.weibo.com>
Server :
Server :)
Server :* 2 FETCH (FLAGS (\Seen) BODY[HEADER.FIELDS (DATE FROM)] {114}
Server :Date: Wed, 9 Nov 2016 22:53:38 +0800 (CST)
Server :From: =?gb2312?B?zfjS19PDu6fW0NDE?= <passport@service.netease.com>
Server :
Server :)
Server :* 3 FETCH (FLAGS (\Seen) BODY[HEADER.FIELDS (DATE FROM)] {104}
Server :Date: Fri, 11 Nov 2016 05:07:05 -0000
Server :From: "PlayStation" <Sony@email.sonyentertainmentnetwork.com>
Server :
Server :)
Server :* 4 FETCH (FLAGS (\Seen) BODY[HEADER.FIELDS (DATE FROM)] {104}
Server :Date: Fri, 11 Nov 2016 05:28:26 -0000
Server :From: "PlayStation" <Sony@email.sonyentertainmentnetwork.com>
Server :
Server :)
Server :* 5 FETCH (FLAGS () BODY[HEADER.FIELDS (DATE FROM)] {105}
Server :Date: Sat, 12 Nov 2016 02:44:12 +0800
Server :From: =?UTF-8?B?5paw5rWq5b6u5Y2a?= <message@service.weibo.com>
Server :
Server :)
Server :* 6 FETCH (FLAGS () BODY[HEADER.FIELDS (DATE FROM)] {105}
Server :Date: Sun, 13 Nov 2016 18:18:02 +0800
Server :From: =?UTF-8?B?5paw5rWq5b6u5Y2a?= <message@service.weibo.com>
Server :
Server :)
Server :* 7 FETCH (FLAGS () BODY[HEADER.FIELDS (DATE FROM)] {105}
Server :Date: Mon, 14 Nov 2016 12:55:08 +0800
Server :From: =?UTF-8?B?5paw5rWq5b6u5Y2a?= <message@service.weibo.com>
Server :
Server :)
Server :* 8 FETCH (FLAGS () BODY[HEADER.FIELDS (DATE FROM)] {105}
Server :Date: Tue, 15 Nov 2016 16:35:52 +0800
Server :From: =?UTF-8?B?5paw5rWq5b6u5Y2a?= <message@service.weibo.com>
Server :
Server :)
Paul Kertscher
  • 9,416
  • 5
  • 32
  • 57
Joel Chen
  • 31
  • 6
  • 1
    Welcome to stackoverflow. What have you done to solve your issue? Please see [this question](http://stackoverflow.com/questions/469695/decode-base64-data-in-java) on how to decode Base64 in Java. – Paul Kertscher Dec 07 '16 at 07:16
  • Ok,thx for your help . ;) – Joel Chen Dec 07 '16 at 07:27
  • 1
    These are called encoded words. You should be able to find a parser for them. And not all of them are unicode: one of them is in GB2312. – Max Dec 07 '16 at 14:52
  • Thx you guys , I have solved this problem – Joel Chen Dec 10 '16 at 10:35
  • Possible duplicate of [Decode Base64 data in Java](https://stackoverflow.com/questions/469695/decode-base64-data-in-java) – Armali May 09 '18 at 08:23

0 Answers0