2010-07-31 82 views
2

我想從Java代碼中獲取我的gmail帳戶的電子郵件。我怎麼能這樣做呢?如何從Java應用程序訪問我的Gmail郵件?

+0

你好,這功課嗎? – 2010-07-31 09:06:32

+0

[使用IMAP從GMail將郵件發送到Java應用程序](http://stackoverflow.com/questions/61176/getting-mail-from-gmail-into-java-application-using-imap) – 2010-07-31 09:16:10

+0

搜索框在右上方。 – 2010-07-31 10:53:33

回答

1

Gmail使用IMAP,其中Javamail可以使用。嘗試在實現中使用它,如果遇到困難,請在此處發佈一些更具體的問題。

+0

鏈接目前被打破。 – palacsint 2013-01-15 11:26:47

+1

固定,謝謝.. – 2013-01-15 15:17:15

1

另一種選擇:如果您不介意這是一個Gmail特定的解決方案,請注意,Gmail還會向您的郵箱提供RSS源,然後您可以使用正常的XML處理API訪問該郵箱。

0

下面是使用POST OFFICE PROTOCOL(pop3)從gmail帳戶獲取郵件及其附件(如果有)的代碼。

import com.sun.mail.pop3.POP3Folder; 
import com.sun.mail.pop3.POP3SSLStore; 

import java.io.*; 
import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.MimeBodyPart; 


public class MailfetchingPop3 
{ 
    private Session session; 
    private POP3SSLStore store; 
    private String username; 
    private String password; 
    private POP3Folder folder; 
    public static String numberOfFiles = null; 
    public static int toCheck = 0; 
    public static Writer output = null; 
    URLName url; 
    public static String receiving_attachments="C:\\download"; 

    public MailfetchingPop3() 
    { 
     session = null; 
     store = null; 
    } 

    public void setUserPass(String username, String password) 
    { 
     this.username = username; 
     this.password = password; 
    } 

    public void connect() 
    throws Exception 
    { 
     String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; 
     Properties pop3Props = new Properties(); 
     pop3Props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY); 
     pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false"); 
     pop3Props.setProperty("mail.pop3.port", "995"); 
     pop3Props.setProperty("mail.pop3.socketFactory.port", "995"); 
     url = new URLName("pop3", "pop.gmail.com", 995, "", username, password); 
     session = Session.getInstance(pop3Props, null); 
     store = new POP3SSLStore(session, url); 
     store.connect(); 
    } 

    public void openFolder(String folderName) 
    throws Exception 
    { 
     folder = (POP3Folder)store.getFolder(folderName); 
     System.out.println((new StringBuilder("For test----")).append(folder.getParent().getFullName()).toString()); 
     if(folder == null) 
      throw new Exception("Invalid folder"); 
     try 
     { 
      folder.open(2); 
      System.out.println((new StringBuilder("Folder name----")).append(folder.getFullName()).toString()); 
     } 
     catch(Exception ex) 
     { 
      System.out.println((new StringBuilder("Folder Opening Exception..")).append(ex).toString()); 
     } 
    } 

    public void closeFolder() 
    throws Exception 
    { 
     folder.close(false); 
    } 

    public int getMessageCount() 
    throws Exception 
    { 
     return folder.getMessageCount(); 
    } 

    public int getNewMessageCount() 
    throws Exception 
    { 
     return folder.getNewMessageCount(); 
    } 

    public void disconnect() 
    throws Exception 
    { 
     store.close(); 
    } 

    public void printAllMessages() 
    throws Exception 
    { 
     Message msgs[] = folder.getMessages(); 
     FetchProfile fp = new FetchProfile(); 
     folder.fetch(msgs, fp); 
     for(int i = 0; i < msgs.length; i++) 
      dumpEnvelope(msgs[i]); 

    } 



    public static int saveFile(File saveFile, Part part) throws Exception { 

     BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(saveFile)); 

     byte[] buff = new byte[2048]; 
     InputStream is = part.getInputStream(); 
     int ret = 0, count = 0; 
     while((ret = is.read(buff)) > 0){ 
      bos.write(buff, 0, ret); 
      count += ret; 
     } 
     bos.close(); 
     is.close(); 
     return count; 
    } 

    private static void dumpEnvelope(Message m) throws Exception 
    { 
     String body=""; 
     String path=""; 
     int size=0; 
     Object content = m.getContent(); 
     if(content instanceof String){ 
      body = (String)content; 
     } 
     else if(content instanceof Multipart) 
     { 
      Multipart mp = (Multipart)content; 
      for (int j=0; j < mp.getCount(); j++) 
      { 
       Part part = mp.getBodyPart(j); 
       String disposition = part.getDisposition(); 
       //System.out.println("test disposition---->>"+disposition); 
       if (disposition == null) { 
        // Check if plain 
        MimeBodyPart mbp = (MimeBodyPart)part; 
        if (mbp.isMimeType("text/plain")) { 
         body += mbp.getContent().toString(); 
        } 
        else if (mbp.isMimeType("TEXT/HTML")) { 
         body += mbp.getContent().toString(); 
        } 
        else { 
         //unknown 
        } 
       } else if ((disposition != null) && 
         (disposition.equals(Part.ATTACHMENT) || disposition.equals(Part.INLINE) || disposition.equals("ATTACHMENT") || disposition.equals("INLINE"))) 
       { 
        // Check if plain 
        MimeBodyPart mbp = (MimeBodyPart)part; 
        if (mbp.isMimeType("text/plain")) { 
         body += (String)mbp.getContent(); 
        } 
        else if (mbp.isMimeType("TEXT/HTML")) { 
         body += mbp.getContent().toString(); 
        } 
        else { 
         File savedir = new File(receiving_attachments); 
         savedir.mkdirs(); 
         File savefile = new File(savedir+"\\"+part.getFileName()); 
         path = savefile.getAbsolutePath(); 
         size = saveFile(savefile, part); 

        } 
       } 
      } 
     } 

    } 
    public static void main(String args[]) 
    { 
     try 
     { 
      MailfetchingPop3 gmail = new MailfetchingPop3(); 
      gmail.setUserPass("your_gmail_Id", "your_gmail_mail_id_password"); 
      gmail.connect(); 
      gmail.openFolder("INBOX"); 
      gmail.printAllMessages(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
    } 



} 

運行,你需要下載javamail.jaractivation.jar

3

這裏是刷新工作代碼,顯示在一個適當的格式在控制檯中的電子郵件封郵件有附件也一起被下載了這個java類...

import com.sun.mail.pop3.POP3Folder; 
import com.sun.mail.pop3.POP3SSLStore; 

import java.io.*; 
import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.MimeBodyPart; 


public class MailfetchingPop3 
{ 
    private Session session; 
    private POP3SSLStore store; 
    private String username; 
    private String password; 
    private POP3Folder folder; 
    public static String numberOfFiles = null; 
    public static int toCheck = 0; 
    public static Writer output = null; 
    URLName url; 
    public static String receiving_attachments="C:\\download"; 

    public MailfetchingPop3() 
    { 
     session = null; 
     store = null; 
    } 

    public void setUserPass(String username, String password) 
    { 
     this.username = username; 
     this.password = password; 
    } 

    public void connect() 
    throws Exception 
    { 
     String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; 
     Properties pop3Props = new Properties(); 
     pop3Props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY); 
     pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false"); 
     pop3Props.setProperty("mail.pop3.port", "995"); 
     pop3Props.setProperty("mail.pop3.socketFactory.port", "995"); 
     url = new URLName("pop3", "pop.gmail.com", 995, "", username, password); 
     session = Session.getInstance(pop3Props, null); 
     store = new POP3SSLStore(session, url); 
     store.connect(); 
    } 

    public void openFolder(String folderName) 
    throws Exception 
    { 
     folder = (POP3Folder)store.getFolder(folderName); 
     System.out.println((new StringBuilder("For test----")).append 
(folder.getParent().getFullName()).toString()); 
     if(folder == null) 
      throw new Exception("Invalid folder"); 
     try 
     { 
      folder.open(2); 
      System.out.println((new StringBuilder("Folder name----")).append 
(folder.getFullName()).toString()); 
     } 
     catch(Exception ex) 
     { 
      System.out.println((new StringBuilder("Folder Opening Exception..")).append(ex).toString()); 
     } 
    } 

    public void closeFolder() 
    throws Exception 
    { 
     folder.close(false); 
    } 

    public int getMessageCount() 
    throws Exception 
    { 
     return folder.getMessageCount(); 
    } 

    public int getNewMessageCount() 
    throws Exception 
    { 
     return folder.getNewMessageCount(); 
    } 

    public void disconnect() 
    throws Exception 
    { 
     store.close(); 
    } 

    public void printAllMessages() 
    throws Exception 
    { 
     Message msgs[] = folder.getMessages(); 
     FetchProfile fp = new FetchProfile(); 
     folder.fetch(msgs, fp); 
     for(int i = 0; i < msgs.length; i++){ 
      Message message = msgs[i]; 
      dumpEnvelope(msgs[i]); 
     System.out.println("=============================="); 
    System.out.println("Email #" + (i + 1)); 
    System.out.println("Subject: " + message.getSubject()); 
    System.out.println("From: " + message.getFrom()[0]); 
    System.out.println("Text: " + message.getContent().toString()); 
     } 
    } 



    public static int saveFile(File saveFile, Part part) throws Exception { 

     BufferedOutputStream bos = new BufferedOutputStream(new 
FileOutputStream(saveFile)); 

     byte[] buff = new byte[2048]; 
     InputStream is = part.getInputStream(); 
     int ret = 0, count = 0; 
     while((ret = is.read(buff)) > 0){ 
      bos.write(buff, 0, ret); 
      count += ret; 
     } 
     bos.close(); 
     is.close(); 
     return count; 
    } 

    private static void dumpEnvelope(Message m) throws Exception 
    { 
     String body=""; 
     String path=""; 
     int size=0; 
     Object content = m.getContent(); 
     if(content instanceof String){ 
      body = (String)content; 
     } 
     else if(content instanceof Multipart) 
     { 
      Multipart mp = (Multipart)content; 
      for (int j=0; j < mp.getCount(); j++) 
      { 
       Part part = mp.getBodyPart(j); 
       String disposition = part.getDisposition(); 
       //System.out.println("test disposition---->>"+disposition); 
       if (disposition == null) { 
        // Check if plain 
        MimeBodyPart mbp = (MimeBodyPart)part; 
        if (mbp.isMimeType("text/plain")) { 
         body += mbp.getContent().toString(); 
        } 
        else if (mbp.isMimeType("TEXT/HTML")) { 
         body += mbp.getContent().toString(); 
        } 
        else { 
         //unknown 
        } 
       } else if ((disposition != null) && 
         (disposition.equals(Part.ATTACHMENT) || disposition.equals 
(Part.INLINE) || disposition.equals("ATTACHMENT") || disposition.equals 
("INLINE"))) 
       { 
        // Check if plain 
        MimeBodyPart mbp = (MimeBodyPart)part; 
        if (mbp.isMimeType("text/plain")) { 
         body += (String)mbp.getContent(); 
        } 
        else if (mbp.isMimeType("TEXT/HTML")) { 
         body += mbp.getContent().toString(); 
        } 
        else { 
         File savedir = new File(receiving_attachments); 
         savedir.mkdirs(); 
         File savefile = new File(savedir+"\\"+part.getFileName()); 
         path = savefile.getAbsolutePath(); 
         size = saveFile(savefile, part); 

        } 
       } 
      } 
     } 

    } 
    public static void main(String args[]) 
    { 
     try 
     { 
      MailfetchingPop3 gmail = new MailfetchingPop3(); 
      gmail.setUserPass("your-gmail-username", "your-gmail-password"); 
      gmail.connect(); 
      gmail.openFolder("INBOX"); 
      gmail.printAllMessages(); 

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



} 
相關問題