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




Source: https://habr.com/ru/post/J110738/


All Articles