0

Android GMail クライアント アプリケーションを作成しています。

メッセージを作成するときに、次のようにヘッダーを追加します。

MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(username));
msg.setSubject(subject);
msg.setText(message);
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));

long time = someTime; 
msg.addHeader("My_Header", Long.toString(time));

//IMAPFolder f declaration & initialization

    f.open(Folder.READ_WRITE);
f.addMessages(new Message[]{msg});
f.close(true);

すべて正常に動作し、PC で GMail アカウントを表示すると、ヘッダーがメッセージに正しく追加されていることがわかります。ただし、後でヘッダー情報を取得しようとすると、非常に奇妙になります。

電話すると

String[] str = msg.getHeader("My_Header");

getHeader()nullアプリを実行している場合に戻ります。ただし、アプリをデバッグしてgetHeader()呼び出しの前にブレークポイントを設定すると、ヘッダー値が正しく返されます。

私のソースコード:

MimeMessage msg = getNextMessage();
String subject = msg.getSubject();
InternetAddresses to[] = msg.getAllRecipients()

String when[] = msg.getHeader(GMailClient.TIME_TO_SEND);        
if (when == null) {
            Log.i(TAG, "Null Header");
} else {
    long time = Long.parseLong(when[0]);
            Log.i(TAG, "Value retrieved: " + when[0]);
}
4

1 に答える 1

0

Gmail が IMAP 経由でヘッダー情報を正しく返していない可能性がありますか? プロトコル トレースを調べて、サーバーが要求に対して何を返しているかを正確に確認することをお勧めします。

また、(例)を使用してメッセージ全体を書き出してみてください

msg.writeTo(new FileOutputStream("msg.txt"));

ヘッダーがあるかどうかを確認します。そうであり、プロトコル トレースが getHeader 呼び出しに対して返されていないことを示している場合、それはサーバーのバグです。その場合、そのようなサーバーのバグを回避する方法については、JavaMail の FAQ エントリを参照してください。

于 2011-11-30T20:26:22.940 に答える