import javax.mail.*
import java.util.Properties
def emailAddress = "you@gmail.com"
def password = "password"
def server = "imap.gmail.com"
def port = 993
def props = new Properties()
props.setProperty("mail.store.protocol", "imaps")
props.setProperty("mail.imaps.host", server)
props.setProperty("mail.imaps.port", port.toString())
//very important or you will get errors such as Exception in thread "main" com.sun.mail.util.DecodingException: BASE64Decoder: Error in encoded stream: needed 4 valid base64 characters but only got 1 before EOF, the 10 most recent characters were: "Q3w5ilxj2P"
props.setProperty("mail.imaps.partialfetch", "false");
def session = javax.mail.Session.getDefaultInstance(props, null)
def store = session.getStore("imaps")
store.connect(emailAddress, password)
println "connected to Gmail"
def inboxFolder = "INBOX"
def folder = store.getFolder(inboxFolder)
folder.open(Folder.READ_ONLY)
javax.mail.search.SearchTerm searchTerm = new javax.mail.search.AndTerm(
        new javax.mail.search.SubjectTerm("SUBJECT YOUR ARE SEARCHING FOR"),
)
def messages = folder.search(searchTerm)
messages.eachWithIndex {message, i ->
    def content = message.content
    if (content instanceof javax.mail.Multipart) {
        javax.mail.Multipart mp = (javax.mail.Multipart) content;
        for (int j = 0; j < mp.getCount(); j++) {
            javax.mail.Part part = mp.getBodyPart(j)
            String disposition = part.getDisposition()
            if (disposition != null && disposition.equalsIgnoreCase(javax.mail.Part.ATTACHMENT)) {
                saveFile(part.getFileName(), part.getInputStream())
            }
        }
    }
}
def saveFile(String fileName, InputStream inputStream) {
    println 'Saving file: ' + fileName
    def file = new File('/tmp/' + fileName)
    if (file.exists()) {
        for (int i = 0; file.exists(); i++) {
            file = new File('/tmp/' + i + '_' + fileName)
        }
    }
    file.append(inputStream)
    println 'File saved: ' + fileName
}
Sunday, October 16, 2011
Download GMail email attachments by subject
I used to use my work scanner to scan all of my documents, photos, etc. So recently I needed to find something. However, since all of them are labeled as Document.pdf I had hard time finding what I was looking. 
My options were to download my mail using Thunderbird and then search for those emails or to download one attachment at the time.
I did not like either. So, I wrote this simple groovy script that downloads attachments for a specific email subject.
Subscribe to:
Post Comments (Atom)
 
No comments:
Post a Comment