1

Jython2.5.3を使用してメールに添付された画像を取得しようとしています。メールを受け取ります(Python imapライブラリのJythonバージョンを使用)。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'はバイトの大きなブロックとして返されます。これは、通常のPythonではファイルに直接書き込みます。ただし、Jythonで同じことを実行すると、次のエラーが発生します。

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

Jythonに私の大きなデータブロブをバイト配列として認識させる正しい方法は何ですか?

PS:書き込みコードはtempfile.mkstmp()を使用します。これは、デフォルトでバイナリの書き込みになります...

4

2 に答える 2

0

将来の読者のために、これが私がそれを回避した方法です。コードでは、thaは次のように記述します。

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()
于 2013-01-20T01:36:21.627 に答える
0

これが、gmailsmtpを使用して画像の添付ファイルを追加するための私のコードです。

コード:

#!/usr/bin/env python
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os

USERNAME = "___YOUR SMTP EMAIL HERE___"
PASSWORD = "__YOUR SMTP PASSWORD HERE___"

def sendMail(to, subject, text, files=[]):
    assert type(to)==list
    assert type(files)==list

    msg = MIMEMultipart()
    msg['From'] = USERNAME
    msg['To'] = COMMASPACE.join(to)
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = subject

    msg.attach( MIMEText(text) )

    for file in files:
        part = MIMEBase('application', "octet-stream")
        part.set_payload( open(file,"rb").read() )
        Encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'attachment; filename="%s"'
                       % os.path.basename(file))
        msg.attach(part)

    server = smtplib.SMTP('smtp.gmail.com:587')
    server.ehlo_or_helo_if_needed()
    server.starttls()
    server.ehlo_or_helo_if_needed()
    server.login(USERNAME,PASSWORD)
    server.sendmail(USERNAME, to, msg.as_string())
    server.quit()

sendMail( ["___EMAIL TO RECEIVE THE MESSAGE__"],
        "Alarm notification",
        "Someone has entered the room, picture attached",
        ["/home/pi/webcam.jpg"] )
于 2019-12-11T21:02:47.520 に答える