Большие письма в Gmail

Как вы знаете, Gmail не позволяет сортировать письма, в частности по размеру.
Есть сервис, который помечает большие письма меткой — www.findbigmail.com/, но не все хотят давать не понятно кому свой пароль.

Я написал скрипт (на груви ), который создаёт метку «Big Mail» и маркирует ей все письма размером больше чем 4Мб. В скрипте надо заменить имя юзера и пароль в Gmail, а также, если хотите, размер «больших» мейлов.

Для работы скрипта в classpath должны быть jars отсюда.

Итерация по сообщениям медленная (1-2 в секунду), так что я поставил печать номера просматриваемого письма, чтобы вы знали, что скрипт не застрял.
Забрать все сообщения даже при моём количестве (ок 20000) занимает мало времени. Но при обращении к аттрибутам сообщения (getSize()) Message пойдет на сервер.
Можно настроить это на Pre Fetch, тогда общее время может уменьшиться, но вырастет (и серьезно) время получения списка сообщений (т.е. будете ждать не зная жив ли он вообще)

Еще интересный момент: copyMessages() в применении к Gmail ничего не копирует или переносит, а просто добавляет метку.

Сообщения я помечаю по одному, так, чтобы не получилось, что скрипт упал (например потому что упала сеть) и ничего не сделал.

Вообще есть куда улучшать — интерактивно спрашивать имя и пароль, не помечать те, которые уже помечены и т.д. Кому нужно — допилит :)

Не забудьте сделать IMAP — enable в Settings Гмаила.



// 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 = ** 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




+28
26 декабря 2010, 17:06
13
javax 41,8

комментарии (26)

+27
ID175055 #
Месье…
+21
javax #
э… что?
+29
FinikWasHere #
знает
+19
ID175055 #
э… что?
+22
Screatch #
толк
+20
ID175055 #
э… в чем?
+26
Dialog #
в извращениях
+13
Horse #
.
–9
AlexandrFox #
в них
+2
ShadowMaster #
Offline gmail сохраняет данные в локальной sqlite базе. Ее можно быстренько обработать.
0
javax #
О! А как к ней подступиться? Надо знать схему?
+1
centur #
Есть SQLite Explorer.
0
javax #
Ок, спасибо!
+5
Hoorsh #
Mozilla Thunderbird — сортирует по:

+11
Kakysha #
Вы правильно делаете скриншоты! Молодец!
+3
RainWarrior #
<irony>А как же сглаживание?</irony>
+1
arinoki #
вот вам со сглаживанием ))
Hosted by imgur.com
+5
centur #
Подключите по IMAP нормальный клиент и вычистите все что надо. Я после длительного пользования веб-интерфейсом устал и подключил outlook 2010 — вполне неплохая комбинация получилась
+2
javax #
Ну может. Хотя интересно было с IMAP и javamail поиграться :)
+2
centur #
=) Поверьте, веб-интерфейс после вменяемых клиентов выглядит таким убогим…
0
asm0dey #
Так и не смог ни к одному привыкнуть…
0
arinoki #
да, аутлук 2010 на удивление неплох) скрин выше :)
0
Qiwichupa #
у гмейла есть так называемые «экспериментальные функции», я не интересовался — они разрабами пишутся, или коммунити тоже участвует. А то можно было бы заслать, наверное.
0
Guria #
исключительно разработчиками. можно только фичреквест заслать
+4
dShaded #
Groovy может сам выкачать нужные jar'ы из репозитория maven (grape). В версии 1.7 для этого достаточно дописать аннотацию к импорту:
@Grab(group='javax.mail', module='mail', version='1.4.3')
import javax.mail.*
В версии 1.6 тоже делается, но немного сложнее.

И было бы неплохо добавить в начало скрипта
#!/usr/bin/groovy
0
javax #
О, спасибо, не знал такого

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.