Search code examples
pythonemailjython

How to save email image attachment using Jython


I'm attempting to grab an image attached to an email using Jython 2.5.3. I get the email (using they Jython version of the Python imap library). I can get the attachment by looping through the parts, finding the correct part type using get_content_type():

image, img_ext = None, None
for part in self.mail.get_payload():
    part_type, part_ext = part.get_content_type().split('/')
    part_type = part_type.lower().strip()
    part_ext = part_ext.lower().strip()
    if part_type == 'image':
        image =  part.get_payload(decode=True)
        img_ext = part_ext
 return image, img_ext

'image' is returned as a big block of bytes, which in regular Python I'd write out directly to a file. However when I try the same thing in Jython I get the following error:

TypeError: write(): 1st arg can't be coerced to java.nio.ByteBuffer[], java.nio.ByteBuffer

What's the right way to make Jython recognize my big blob of data as a byte array?

PS: the writing code uses tempfile.mkstmp(), which defaults to writing binary...


Solution

  • For future readers, here's how I got around it. In the code tha does the writing:

    from org.python.core.util import StringUtil
    from java.nio import ByteBuffer
    
    
    tmp, filename = tempfile.mkstemp(suffix = "." + extension, text=True)
    bytes = StringUtil().toBytes(attachment)
    bb = ByteBuffer.wrap(bytes)
    tmp.write(bb)
    tmp.close()