【问题标题】:Fetching X-Mailer in java imap在 java imap 中获取 X-Mailer
【发布时间】:2011-04-09 20:47:16
【问题描述】:

如何在 java imap 中获取 x-mail ? 我已经编写了一个示例程序,但它不能正常工作。 我得到空值。 我哪里错了?

import com.sun.mail.imap.IMAPFolder;
    import com.sun.mail.imap.IMAPMessage;
    import javax.mail.*;
    import javax.mail.internet.*;
    import java.util.*;
    import java.io.*;
    import java.lang.reflect.Field;


/**
 *
 * @author vivek
 */
public class Main {

    public static void main(String[] args) {

    Properties props = System.getProperties();    
    props.setProperty("mail.imap.socketFactory.port", "993");
    props.setProperty("mail.store.protocol", "imaps");
    try {
      Session session = Session.getDefaultInstance(props, null);
      Store store = session.getStore("imaps");
      store.connect("imap.gmail.com", "username", "password");
      System.out.println(store);
      Folder inbox =  store.getFolder("Inbox");
      inbox.open(Folder.READ_ONLY);      
      FetchProfile fp = new FetchProfile();     
      fp.add("X-Mailer"");
      Message[] messages=inbox.getMessages(1, 2);      
      inbox.fetch(messages, fp);            
      for (Message message : messages) {
        System.out.println(message);        
        System.out.println(message.getHeader("X-Mailer""));

      }
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    }

  }
}

imap 的调试跟踪是

 `DEBUG: JavaMail version 1.4.4
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc]
DEBUG: mail.imap.fetchsize: 16384
DEBUG: mail.imap.statuscachetimeout: 1000
DEBUG: mail.imap.appendbuffersize: -1
DEBUG: mail.imap.minidletime: 10
DEBUG: trying to connect to host "imap.gmail.com", port 993, isSSL true
* OK Gimap ready for requests from 116.202.153.186 bs33if4292090ibb.10
A0 CAPABILITY
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA XLIST CHILDREN XYZZY SASL-IR AUTH=XOAUTH
A0 OK Thats all she wrote! bs33if4292090ibb.10
DEBUG IMAP: AUTH: XOAUTH
DEBUG: protocolConnect login, host=imap.gmail.com, user=username, password=<non-null>
A1 LOGIN username password
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE
A1 OK username@gmail.com vivek goel authenticated (Success)
A2 CAPABILITY
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE
A2 OK Success
imaps://username@imap.gmail.com
DEBUG: connection available -- size: 1
A3 EXAMINE Inbox
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
* OK [PERMANENTFLAGS ()]
* OK [UIDVALIDITY 2]
* 27512 EXISTS
* 0 RECENT
* OK [UIDNEXT 58271]
A3 OK [READ-ONLY] Inbox selected. (Success)
A4 FETCH 1 (BODY.PEEK[HEADER.FIELDS (X-Mailer)])
* 1 FETCH (BODY[HEADER.FIELDS (X-Mailer)] {4}


)
A4 OK Success
com.sun.mail.imap.IMAPMessage@6ba7508a
null`

【问题讨论】:

  • 使用 -Dmail.debug=true 了解 IMAP 服务器的情况。而 X- 标头都是可选的。
  • 我看不到 X-Mailer Fetch 。当我启用调试模式时

标签: java imap jakarta-mail


【解决方案1】:

看起来不错,不错。现在,您是否使用 Thunderbird 进行 imap 并检查 X-mailer 标头是否存在?

【讨论】:

  • 是的。它存在。但是当我启用调试或迭代时抛出所有 header 。我看不到这个标题。它不在 fetch 命令中。
猜你喜欢
  • 2013-01-17
  • 1970-01-01
  • 2011-08-27
  • 2022-08-09
  • 2018-05-07
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
相关资源
最近更新 更多