Translate

2012年1月12日木曜日

Gmail POP の怪




※まだ解決してません


うーん、
Gmailをjavamail1-4.4を使ってメッセージ取得
をためしたけど、250件づつしかできない..


あるWebアプリを運営していて結果を
所定のGmailアカウントへ送信していて
1万件くらいたまったので、
JavaMail APIを使ってCSVファイル化するプログラムを組んで
INBOX内のメールの本文を読み取る処理を書き実行した..


JavaMailサンプル

 // POPサーバへ接続するための情報をPropertiesへセットする
 Properties mailProps = new Properties();

 // Gmailへ接続する場合のサーバFQDN
 mailProps.setProperty("mail.pop3.host","pop.gmail.com");
 // GmailはPOP3sのようだ
 mailProps.setProperty("mail.pop3.port", "995");
 // 接続時のタイムアウト
 mailProps.setProperty("mail.pop3.connectiontimeout", "60000");
 // POP3通信中タイムアウト
 mailProps.setProperty("mail.pop3.timeout", "60000");
 // POP3sなのでSSLSocketFactoryを指定
 mailProps.setProperty("mail.pop3.socketFactory.class",
  "javax.net.ssl.SSLSocketFactory");
 mailProps.setProperty("mail.pop3.socketFactory.fallback", "false");
 mailProps.setProperty("mail.pop3.socketFactory.port", "995");

 // javax.mailのセッションインスタンス取得
 Session mailSession = Session.getInstance(mailProps,
  new Authenticator(){
   protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(
     "hogehoge@gmail.com", "hogehoge_password");
   }
  }
 );

 // デバッグモードをTRUEにするとSystem.errにたくさんログが出る
 // RETRIEVE後既読にならなかった
 mailSession.setDebug(false);

 // POP3接続し、ストアオブジェクト取得
 Store store = mailSession.getStore("pop3");

 // 接続(認証)
 store.connect();

 // finally句で使うので宣言だけ
 Folder folder = null;

 try{
  // INBOX=受信トレイで決め打ちらしい
  folder = store.getFolder("INBOX");

  // このサンプルはRETRIEVEだけなので読み取り専用
  folder.open(Folder.READ_ONLY);

  // 取得可能件数(たくさん未読メールがある場合、
  // 私の環境では毎回250件)
  int total = folder.getMessageCount();

  for(int pos=0;pos<total;pos++){
   // getMessageのポジションは1から始まる
   Message message = folder.getMessage(pos+1);

   // messageからサブジェクトやコンテンツを取得する処理


  }
 }finally{
  folder.close(false);
 }



..んだけど、
Folder#getMessageCount()しても毎回250が帰ってきて
なんでか250件づつしかとれない。

取得した250件も
古いメッセージから順番になってる。
#javamailデバッグモードだとおなじメール範囲

うーん、一度に250件とかの制約がサーバにあるのかな..

..Googleってみると同じようなことを考えている人はいる様子

英語のサイトでも
明確な答えを出してる所が見つからない..

たとえばこんなのとか..

Is there a 250 messages limit when do pop?
http://www.google.com/support/forum/p/gmail/thread?tid=4e95906f3f8cad33&hl=en



これは勝手な憶測だけど、
Gmail側がPOPサーバの負荷を考慮して
制限をつけていて
制限値については公表していない
というところかもしれない。


結局バッチプログラム化して40回ぶんまわして対応した..


AppEngineで作ったアプリなので
BigTableに入れるよりかわPOPで吸い出しのほうが
楽かなと思ったけど..

0 件のコメント:

ClaudeをOpenAI O1のように思考させるDifyサンプルを試す

 Difyの「探索」タブにはさまざまなサンプルが載っており、その1つに「Thinking Claude (OpenAI O1 Alternative)」というものがある。   このサンプルがどういうものか、未だに自分でも解けない以下の問題をためしに聞いてみることにした。 『人類の...