Gmailの大きなメール

ご存じのとおり、Gmailでは、特にサイズで文字を並べ替えることはできません。

ラベルで大きな文字をマークするサービス-www.findbigmail.comがありますが、誰もが明確でない人にパスワードを与えたいとは限りません。



「Big Mail」ラベルを作成し、4MBを超えるすべての文字でマークするスクリプトを(溝に)書きました。 スクリプトでは、Gmailのユーザー名とパスワード、および必要に応じて「大きい」メールのサイズを置き換える必要があります。



スクリプトがクラスパスで機能するには、ここから jarが存在する必要があります。



メッセージの反復が遅い(1秒間に1〜2)ので、表示されているメッセージの番号を出力して、スクリプトがスタックしていないことを確認します。

私の量(約20,000)であっても、すべてのメッセージを収集するには少し時間がかかります。 ただし、メッセージ属性(getSize())にアクセスすると、メッセージはサーバーに送信されます。

これをPre Fetchに設定すると、合計時間が減少する可能性がありますが、メッセージのリストを受信する時間が増加します(そして真剣に)(つまり、彼が生きているかどうかを知らずに待機します)



もう1つの興味深い点は、Gmailに適用されるcopyMessages()は何もコピーも転送もせず、単にラベルを追加するだけです。



メッセージを1つずつマークします。これにより、スクリプトがクラッシュした(ネットワークがクラ​​ッシュしたなどの理由で)ことで、何もしなかったことがわかりません。



一般に、改善すべき点はたくさんあります。名前とパスワードを対話形式で要求し、すでにマークされているものにはマークを付けないなどです。 誰がそれを必要とする-終了します:)



IMAPを忘れずに-Gmailの設定で有効にしてください。







// Mark large email messages in Gmail by "Bim Mail" label.

// (c) Pavel :)

// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY



import java.security.NoSuchProviderException

import javax.mail.*



final int BIG_MAIL_SIZE = 2 ** 22 //4Mb

final String username = "xxx"

final String password = "xxx"



Properties props = System.getProperties ()

props.setProperty ( "mail.store.protocol" , "imaps" )

props.setProperty ( "mail.imap.socketFactory.class" , "javax.net.ssl.SSLSocketFactory" )

props.setProperty ( "mail.imap.socketFactory.fallback" , "false" )





Folder all, big

Store store



try {

   Session session = Session.getDefaultInstance ( props, null )

   store = session.getStore ( "imaps" )

   final String mailaddress = "$username@gmail.com"







   store.connect ( "imap.gmail.com" , mailaddress, password )

   def folderName = "[Gmail]/All Mail"

   all = store.getFolder ( folderName )

   all.open ( Folder.READ_WRITE ) ;



   println ( "Creating BigMail ..." )

   big = store.getFolder ( "BigMail" )

   if ( big.create ( Folder.HOLDS_MESSAGES ))

     println "Ok."

   else

     println "Failure. Already exists?"



   big.open ( Folder.READ_WRITE ) ;



   println "Downloading from folder $folderName ...."

   List<Message> messages = all.getMessages ()

   println "Got ${messages.size()} messages"





   int count = 0

   messages.each {

     int size = it.getSize () ;



     if ( size > BIG_MAIL_SIZE ) {

       println "$count: Big mail: ${it.getSubject()} (${it.getSize()})"

       all.copyMessages ([ it ] .toArray ( new Message [ 1 ]) , big )



     }

     else {

       println count

     }

     count++



   }





} catch ( NoSuchProviderException e ) {

   e.printStackTrace () ;

   System.exit ( 1 ) ;

} catch ( MessagingException e ) {

   e.printStackTrace () ;

   System.exit ( 2 ) ;

}

finally {

   // Close connection

   all.close ( false )

   big.close ( false )

   store.close ()

}








Java2html












All Articles