1

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...

theodox
  • 12,028
  • 3
  • 23
  • 36

1 Answers1

0

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()
theodox
  • 12,028
  • 3
  • 23
  • 36