GroovyでGmailを一時ファイルの保存場所として使ってみる
Gmailは僕の生活のなかでとても重要な位置を占めています。もはやGmailなしでは仕事や生活が成り立たないぐらいです。
仕事やネットカフェ、友人の家などでPCにて作業した際にも、一時ファイルのアップロード先として自分に送信し、家で添付ファイルをダウンロード、ということをしていたのですが、 手動でダウンロードした後に展開した後に展開し、指定フォルダに展開し、そのメールを削除 という単純作業が面倒くさいと感じました。
そこで、 IMAPにてファイルを受信、メールの削除をスクリプト化 してみた。
以下のメソッドが、メールの削除とファイルの受信を行ってくれる。対象のメールを絞り込むためには findLogic にクロージャを引き渡します。引数は1つで、 Message クラスのインスタンスが引き渡されます。結果としてbooleanを返せばOK。
import javax.mail.Folder
import javax.mail.Message
import javax.mail.Session
import javax.mail.*
import javax.mail.internet.*
def getGmailAttachedFiles(user, password, findLogic) {
def files = []
def store = Session.getInstance(System.properties, null).getStore("imaps")
store.connect("imap.gmail.com", 993, user, password)
def folder = store.getFolder("INBOX")
if (folder.exists()) {
folder.open(Folder.READ_ONLY)
def message = folder.messages.find(findLogic)
if (!message) System.exit(0);
switch (message.content) {
case String:
break;
default:
Multipart multiPart = message.content
(0..<multiPart.count).each
{ i ->
def part = multiPart.getBodyPart(i)
if (part.fileName) {
def tmpdir = System.properties["java.io.tmpdir"]
def file = new File("${tmpdir}/${part.fileName}")
file.withOutputStream
{ it << part.content }
files << file
}
}
break;
}
message.setFlag(Flags.Flag.DELETED, true)
folder.close(false)
}
store.close()
files
}
以下のように使用。
def files = getGmailAttachedFiles("username@gmail.com", "password") {
it.subject == "in net coffee"
}
files.each {
renemeTo(new File("/home/genzou" + it.name))
}
ディスカッション
コメント一覧
まだ、コメントがありません