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

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

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

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

問題描述

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

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

當(dāng)"開始日期&SearchTermComparisonTerm.GT項時,
當(dāng)"結(jié)束日期SearchTerm有一個ComparisonTerm.LE期限時

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

我們給他們開了一張票,問他們的回應(yīng)有沒有變化,他們回答說什么都沒有變化。當(dāng)然,沒有辦法證明這一點(我們?nèi)匀粵]有時光機)。

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

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

代碼附在下面:

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

根據(jù)該結(jié)果,我們可以得出以下結(jié)論:

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

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

推薦答案

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

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

幾點注意事項…

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

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

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

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

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

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

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

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定