日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了IMAP請求之間的結果不同的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我和我的團隊在我們的應用程序中編寫了一個供其他團隊使用的郵件組件。此組件旨在允許他們使用自定義搜索條件下載電子郵件。目前正在使用的是使用IMAP protocol在Gmail帳戶的一系列日期之間進行郵件搜索。在2016年4月4日格林尼治標準時間6:00AM+1之前,它一直運行正常,只下載范圍內的電子郵件。然而,從格林尼治標準時間8:00AM+1開始,服務器的響應突然發生變化,它開始返回整個收件箱文件夾!

重復最初的測試,我們發現我們收到的是整個收件箱文件夾,而不是范圍內的文件夾。在對IMAP請求進行了一些深入研究后,Gmail似乎在某些情況下更改了返回的電子郵件數量:

當"開始日期&SearchTermComparisonTerm.GT項時,
當"結束日期SearchTerm有一個ComparisonTerm.LE期限時

在這兩種情況下,Gmail的IMAP服務器都會返回文件夾中的所有電子郵件。相反,作為一個例子,雅虎的IMAP服務器只返回那些符合給定條件的電子郵件。

我們給他們開了一張票,問他們的回應有沒有變化,他們回答說什么都沒有變化。當然,沒有辦法證明這一點(我們仍然沒有時光機)。

由于我們對此意外行為產生了很大影響,我們決定進一步調查,并創建了一個簡單的郵件客戶端,以使用不同的條件組合從不同的IMAP服務器下載郵件。

從this link’s程序開始,我們添加了與其他人核對的功能,但更改庫以滿足我們的javax.mail版本1.5.5。因此,我們避免了不同的實現行為。

代碼附在下面:

package gmail;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.search.AndTerm;
import javax.mail.search.ComparisonTerm;
import javax.mail.search.ReceivedDateTerm;
import javax.mail.search.SearchTerm;

public class JavaMailTest {
    
    public static void main(String[] args) {
        
        JavaMailTest testClient=new JavaMailTest();
        
        //Yahoo
        //SEARCH SINCE 3-Apr-2016 BEFORE 7-Apr-2016 ALL
        testClient.performTest(testClient.getYahooImapProps(),ComparisonTerm.GE,ComparisonTerm.LT);
        //Gmail
        //SEARCH SINCE 3-Apr-2016 BEFORE 7-Apr-2016 ALL
        testClient.performTest(testClient.getGmailImapProps(),ComparisonTerm.GE,ComparisonTerm.LT);
        //Yahoo
        //SEARCH SINCE 3-Apr-2016 OR BEFORE 7-Apr-2016 ON 7-Apr-2016 ALL
        testClient.performTest(testClient.getYahooImapProps(),ComparisonTerm.GE,ComparisonTerm.LE);
        //Gmail
        //SEARCH SINCE 3-Apr-2016 OR BEFORE 7-Apr-2016 ON 7-Apr-2016 ALL
        testClient.performTest(testClient.getGmailImapProps(),ComparisonTerm.GE,ComparisonTerm.LE);
        //Yahoo
        //SEARCH NOT ON 3-Apr-2016 SINCE 3-Apr-2016 BEFORE 7-Apr-2016 ALL
        testClient.performTest(testClient.getYahooImapProps(),ComparisonTerm.GT,ComparisonTerm.LT);
        //Gmail
        //SEARCH NOT ON 3-Apr-2016 SINCE 3-Apr-2016 BEFORE 7-Apr-2016 ALL
        testClient.performTest(testClient.getGmailImapProps(),ComparisonTerm.GT,ComparisonTerm.LT);
        //Yahoo
        //SEARCH NOT ON 3-Apr-2016 SINCE 3-Apr-2016 OR BEFORE 7-Apr-2016 ON 7-Apr-2016 ALL
        testClient.performTest(testClient.getYahooImapProps(),ComparisonTerm.GT,ComparisonTerm.LE);
        //Gmail
        //SEARCH NOT ON 3-Apr-2016 SINCE 3-Apr-2016 OR BEFORE 7-Apr-2016 ON 7-Apr-2016 ALL
        testClient.performTest(testClient.getGmailImapProps(),ComparisonTerm.GT,ComparisonTerm.LE);

    }

    public int performTest(Properties props, int startTermCondition, int endTermCondition)
    {
        try {
            Session session = Session.getDefaultInstance(props, null);
            Message[] totalMessages = null;

            Store store = session.getStore(props.getProperty("protocol"));
            store.connect(props.getProperty("mail.imap.host"), props.getProperty("account"), props.getProperty("pass"));
            Folder inbox = store.getFolder("inbox");
            inbox.open(Folder.READ_ONLY);


            SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); 
            Date startDate = ft.parse("2016-04-03");
            Date endDate = ft.parse("2016-04-07");

            System.out.println("Testing email account: <"+props.getProperty("account")+"> with startDate: <" + startDate + "> (ComparisonTerm."+
                    getConditionText(startTermCondition)+") and endDate: <" + endDate+"> (ComparisonTerm."+getConditionText(endTermCondition)+")");

            Message[] messages = inbox.getMessages();

            if (messages != null && messages.length > 0) {
                SearchTerm startDateTearm = 
                        new ReceivedDateTerm(startTermCondition, startDate);

                SearchTerm endDateTerm = 
                        new ReceivedDateTerm(endTermCondition, endDate);

                SearchTerm andTerm = new AndTerm(startDateTearm, endDateTerm); 

                totalMessages = inbox.search(andTerm);
                if(totalMessages.length > 0){
                    System.out.println("Found "+totalMessages.length+" matching messages (Total messages in folder: "+messages.length+")");
                }

                /*for (int i = 0; i < totalMessages.length; i++) {
                    System.out.println(totalMessages[i].getReceivedDate() + " --> Mail Subject:- " + totalMessages[i].getSubject());

                }*/
                //First message
                int currentMessage=0;
                System.out.println("First Message: "+totalMessages[currentMessage].getReceivedDate() + " --> Mail Subject: " + totalMessages[currentMessage].getSubject().substring(0, 5));
                //Last message
                currentMessage=totalMessages.length-1;
                System.out.println("Last Message:  "+totalMessages[currentMessage].getReceivedDate() + " --> Mail Subject: " + totalMessages[currentMessage].getSubject().substring(0, 5));
            }


            inbox.close(true);
            store.close();
            return totalMessages.length;

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

    }
    
    public static String getConditionText(int condition)
    {
        String returnValue="";
        switch (condition) {
        case ComparisonTerm.EQ:
            returnValue="EQ";
            break;
        case ComparisonTerm.GE:
            returnValue="GE";
            break;
        case ComparisonTerm.GT:
            returnValue="GT";
            break;
        case ComparisonTerm.LE:
            returnValue="LE";
            break;
        case ComparisonTerm.LT:
            returnValue="LT";
            break;
        case ComparisonTerm.NE:
            returnValue="NE";
            break;
        default:
            returnValue="Error";
            break;
        }
        return returnValue;
    }
    
    public Properties getYahooImapProps()
    {
        Properties props = new Properties();
        //Yahoo
        String imapServer="imap.mail.yahoo.com";
        String imapPort="993";
        String account="********@yahoo.es";
        String pass="*********";
        
        props.setProperty("mail.imap.host", imapServer);
        props.setProperty("mail.imap.port", imapPort);
        props.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.imap.auth", "true");
        props.setProperty("account", account);
        props.setProperty("pass", pass);
        props.setProperty("protocol", "imaps");
        
        return props;
        
    }

    public Properties getGmailImapProps()
    {
        Properties props = new Properties();
        //Gmail
        String imapServer="imap.gmail.com";
        String imapPort="143";
        String account="******@gmail.com";
        String pass="********";
        
        props.setProperty("mail.imap.host", imapServer);
        props.setProperty("mail.imap.port", imapPort);
        /*props.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.imap.auth", "true");*/
        props.setProperty("account", account);
        props.setProperty("pass", pass);
        props.setProperty("protocol", "imap");
        
        return props;
    }

}

為了使程序輸出更清楚,我在第一個方法輸出之前添加了請求:

  //SEARCH SINCE 3-Apr-2016 BEFORE 7-Apr-2016 ALL
  Testing email account: <*********@yahoo.es> with startDate: <Sun Apr 03 00:00:00 CEST 2016> (ComparisonTerm.GE) and endDate: <Thu Apr 07 00:00:00 CEST 2016> (ComparisonTerm.LT)
  Found 5 matching messages (Total messages in folder: 78)
  First Message: Mon Apr 04 23:14:22 CEST 2016 --> Mail Subject: Aviso
  Last Message:  Tue Apr 05 00:48:00 CEST 2016 --> Mail Subject: Alter
  //SEARCH SINCE 3-Apr-2016 BEFORE 7-Apr-2016 ALL
  Testing email account: <*********@gmail.com> with startDate: <Sun Apr 03 00:00:00 CEST 2016> (ComparisonTerm.GE) and endDate: <Thu Apr 07 00:00:00 CEST 2016> (ComparisonTerm.LT)
  Found 92 matching messages (Total messages in folder: 20138)
  First Message: Sun Apr 03 04:08:47 CEST 2016 --> Mail Subject: Tu es
  Last Message:  Wed Apr 06 22:12:45 CEST 2016 --> Mail Subject: ?Quie
  //SEARCH SINCE 3-Apr-2016 OR BEFORE 7-Apr-2016 ON 7-Apr-2016 ALL
  Testing email account: <*********@yahoo.es> with startDate: <Sun Apr 03 00:00:00 CEST 2016> (ComparisonTerm.GE) and endDate: <Thu Apr 07 00:00:00 CEST 2016> (ComparisonTerm.LE)
  Found 5 matching messages (Total messages in folder: 78)
  First Message: Mon Apr 04 23:14:22 CEST 2016 --> Mail Subject: Aviso
  Last Message:  Tue Apr 05 00:48:00 CEST 2016 --> Mail Subject: Alter
  //SEARCH SINCE 3-Apr-2016 OR BEFORE 7-Apr-2016 ON 7-Apr-2016 ALL
  Testing email account: <*********@gmail.com> with startDate: <Sun Apr 03 00:00:00 CEST 2016> (ComparisonTerm.GE) and endDate: <Thu Apr 07 00:00:00 CEST 2016> (ComparisonTerm.LE)
  Found 20138 matching messages (Total messages in folder: 20138)
  First Message: Sat Sep 04 13:23:35 CEST 2004 --> Mail Subject: Gmail
  Last Message:  Tue Apr 19 10:09:06 CEST 2016 --> Mail Subject: El re
  //SEARCH NOT ON 3-Apr-2016 SINCE 3-Apr-2016 BEFORE 7-Apr-2016 ALL
  Testing email account: <*********@yahoo.es> with startDate: <Sun Apr 03 00:00:00 CEST 2016> (ComparisonTerm.GT) and endDate: <Thu Apr 07 00:00:00 CEST 2016> (ComparisonTerm.LT)
  Found 5 matching messages (Total messages in folder: 78)
  First Message: Mon Apr 04 23:14:22 CEST 2016 --> Mail Subject: Aviso
  Last Message:  Tue Apr 05 00:48:00 CEST 2016 --> Mail Subject: Alter
  //SEARCH NOT ON 3-Apr-2016 SINCE 3-Apr-2016 BEFORE 7-Apr-2016 ALL
  Testing email account: <*********@gmail.com> with startDate: <Sun Apr 03 00:00:00 CEST 2016> (ComparisonTerm.GT) and endDate: <Thu Apr 07 00:00:00 CEST 2016> (ComparisonTerm.LT)
  Found 20138 matching messages (Total messages in folder: 20138)
  First Message: Sat Sep 04 13:23:35 CEST 2004 --> Mail Subject: Gmail
  Last Message:  Tue Apr 19 10:09:06 CEST 2016 --> Mail Subject: El re
  //SEARCH NOT ON 3-Apr-2016 SINCE 3-Apr-2016 OR BEFORE 7-Apr-2016 ON 7-Apr-2016 ALL
  Testing email account: <*********@yahoo.es> with startDate: <Sun Apr 03 00:00:00 CEST 2016> (ComparisonTerm.GT) and endDate: <Thu Apr 07 00:00:00 CEST 2016> (ComparisonTerm.LE)
  Found 5 matching messages (Total messages in folder: 78)
  First Message: Mon Apr 04 23:14:22 CEST 2016 --> Mail Subject: Aviso
  Last Message:  Tue Apr 05 00:48:00 CEST 2016 --> Mail Subject: Alter
  //SEARCH NOT ON 3-Apr-2016 SINCE 3-Apr-2016 OR BEFORE 7-Apr-2016 ON 7-Apr-2016 ALL
  Testing email account: <*********@gmail.com> with startDate: <Sun Apr 03 00:00:00 CEST 2016> (ComparisonTerm.GT) and endDate: <Thu Apr 07 00:00:00 CEST 2016> (ComparisonTerm.LE)
  Found 20138 matching messages (Total messages in folder: 20138)
  First Message: Sat Sep 04 13:23:35 CEST 2004 --> Mail Subject: Gmail
  Last Message:  Tue Apr 19 10:09:06 CEST 2016 --> Mail Subject: El re

根據該結果,我們可以得出以下結論:

考慮到給定的Java條件,Yahoo會返回適當數量的電子郵件。
Javamail的請求可能過于含糊。
@Gmail:考慮到某些請求中的一堆條件…為什么您剛剛決定退還整個文件夾?
為什么同一請求會有不同的響應?
誰正確退回了郵件?
協議的設計難道不是為了使事情標準化,而不是讓事情變得更糟嗎?

我們也嘗試使用Outlook帳戶,結果與Gmail相同。

推薦答案

在我看來,這肯定是Gmail中的一個錯誤。我能夠自己復制它。如果Outlook.com也有同樣的漏洞,我真的很驚訝。

為什么您認為該請求含糊不清?IMAP規范非常明確。

幾點注意事項…

是否確實要使用Java Mail 1.5.5?您顯示的搜索命令反映了1.5.3之前版本的JavaMail bug。
您應該change Session.getDefaultInstance to Session.getInstance。
您don’t need the socket factory properties;只需將”mail.imap.ssl”設置為”true”即可。

這篇關于IMAP請求之間的結果不同的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:IMAP 請求
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定