it-swarm-vi.com

Truy cập email từ gmail bằng IMAP (API javamail)

Tôi đang cố gắng truy cập email từ tài khoản Gmail thông qua IMAP với sự trợ giúp của API JavaMail. Tôi đã tự hỏi tại sao mã này hoạt động cho một tài khoản email nhưng không hoạt động cho một tài khoản khác. 

Tôi có thể truy cập thư mục Inbox của cả hai tài khoản email. Nhưng đối với một trong các tài khoản email, các thư mục khác như SPAM([Gmail]/Spam) không thể truy cập được và nó sẽ ném ngoại lệ FolderNotFoundException. Bất cứ ai có thể xin vui lòng giải thích những gì đang xảy ra? 

Cảm ơn bạn trước.

Đây là mã:

import Java.io.*;
import Java.util.*;
import javax.mail.*;
import javax.mail.Flags.Flag;
import javax.mail.internet.*;

import com.Sun.mail.imap.IMAPFolder;
import com.Sun.mail.imap.IMAPMessage;


public class FolderFetchIMAP {


    public static void main(String[] args) throws MessagingException, IOException {
        IMAPFolder folder = null;
        Store store = null;
        String subject = null;
        Flag flag = null;
        try 
        {
          Properties props = System.getProperties();
          props.setProperty("mail.store.protocol", "imaps");

          Session session = Session.getDefaultInstance(props, null);

          store = session.getStore("imaps");
          store.connect("imap.googlemail.com","[email protected]", "password");

          folder = (IMAPFolder) store.getFolder("[Gmail]/Spam"); // This doesn't work for other email account
          //folder = (IMAPFolder) store.getFolder("inbox"); This works for both email account


          if(!folder.isOpen())
          folder.open(Folder.READ_WRITE);
          Message[] messages = folder.getMessages();
          System.out.println("No of Messages : " + folder.getMessageCount());
          System.out.println("No of Unread Messages : " + folder.getUnreadMessageCount());
          System.out.println(messages.length);
          for (int i=0; i < messages.length;i++) 
          {

            System.out.println("*****************************************************************************");
            System.out.println("MESSAGE " + (i + 1) + ":");
            Message msg =  messages[i];
            //System.out.println(msg.getMessageNumber());
            //Object String;
            //System.out.println(folder.getUID(msg)

            subject = msg.getSubject();

            System.out.println("Subject: " + subject);
            System.out.println("From: " + msg.getFrom()[0]);
           System.out.println("To: "+msg.getAllRecipients()[0]);
            System.out.println("Date: "+msg.getReceivedDate());
            System.out.println("Size: "+msg.getSize());
            System.out.println(msg.getFlags());
            System.out.println("Body: \n"+ msg.getContent());
            System.out.println(msg.getContentType());

          }
        }
        finally 
        {
          if (folder != null && folder.isOpen()) { folder.close(true); }
          if (store != null) { store.close(); }
        }

    }



}
23
Ragini

Có phải một trong những tài khoản sử dụng UI không phải tiếng Anh không?

Tên thư mục Gmail được bản địa hóa đối với cài đặt bản địa hóa của người dùng.

Hiện tại cách duy nhất để có được tên của thư mục được bản địa hóa là sử dụng lệnh XLIST.

13
Pawel Lesnikowski
package com.technicalkeeda;

import Java.io.File;
import Java.io.FileInputStream;
import Java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;

public class GmailInbox {

 public static void main(String[] args) {
  GmailInbox gmail = new GmailInbox();
  gmail.read();
 }

 public void read() {
  Properties props = new Properties();
  try {
   props.load(new FileInputStream(new File("C:\\smtp.properties")));
   Session session = Session.getDefaultInstance(props, null);

   Store store = session.getStore("imaps");
   store.connect("smtp.gmail.com", "*************@gmail.com","your_password");

   Folder inbox = store.getFolder("inbox");
   inbox.open(Folder.READ_ONLY);
   int messageCount = inbox.getMessageCount();

   System.out.println("Total Messages:- " + messageCount);

   Message[] messages = inbox.getMessages();
   System.out.println("------------------------------");
   for (int i = 0; i < 10; i++) {
      System.out.println("Mail Subject:- " + messages[i].getSubject());      
   }
   inbox.close(true);
   store.close();

  } catch (Exception e) {
   e.printStackTrace();
  }
 }

}
6
Vicky

Tôi không chắc chắn nếu điều này có ích, nhưng tôi đã thấy các trường hợp tài khoản gmail có các hộp thư khác nhau, tức là ..

Tài khoản Gmail 1: -

[[Google Mail]]
[[Google Mail]/All Mail]
[[Google Mail]/Bin]
[[Google Mail]/Drafts]
[[Google Mail]/Important]
[[Google Mail]/Sent Mail]
[[Google Mail]/Spam]
[[Google Mail]/Starred]

Tài khoản Gmail 2: -

[[Gmail]]
[[Gmail]/All Mail]
[[Gmail]/Bin]
[[Gmail]/Drafts]
[[Gmail]/Important]
[[Gmail]/Sent Mail]
[[Gmail]/Spam]
[[Gmail]/Starred]
0
rams59

danh sách riêng getResulr1 () {

        try {

            Properties props = new Properties();

            props.put("mail.store.protocol","imaps");

            Session session = Session.getDefaultInstance(props, null);

            Store store = session.getStore("imaps");

            store.connect("imap.gmail.com", "Email Id", "App Password");

            Folder inbox = store.getFolder("inbox");

            //if you want mail from specify floder just change change floder name
            //Folder inbox = store.getFolder("[Gmail]/Drafts");

            inbox.open(Folder.READ_ONLY);

            int messageCount = inbox.getMessageCount();

            Log.e("getFloder ", "getResulr1: "+store.getDefaultFolder().list("*") );

            javax.mail.Folder[] folders = store.getDefaultFolder().list("*");

            for (javax.mail.Folder folder : folders) {

                if ((folder.getType() & javax.mail.Folder.HOLDS_MESSAGES) != 0){

                    Log.e("getFloder ", "getResulr1: "+folder.getName() );

                }
            }

            Log.e("Mail Subject:", "Total Messages:-: "+messageCount );

            javax.mail.Message[] messages = inbox.getMessages();

            System.out.println("------------------------------");

            Log.e("Mail Subject:", "messages: "+messages.toString());

            for (int i = 0; i < messages.length; i++) {

                  Log.e("Mail Subject:", "getResulr1: "+messages[i].getSubject());
            }

            inbox.close(true);

            store.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
0
Arbaz Shaikh