【Python3】メールの添付ファイルにBytesIOを設定する方法

おはこんばんにちは、せなです。
今回は、メール(SMTP)にBytesIOの添付ファイルを設定する方法を備忘録として残したいと思います。

コード

Pillowを使用して読み込んだ画像を添付する想定で説明します。

def pil_to_bytes(img, format="jpeg"):
    from io import BytesIO
    buffer = BytesIO()
    img.save(buffer, format)
    return buffer

def smpt_send(buf):
    from email.message import EmailMessage
    import smtplib, ssl

    account = "アカウントメールアドレス"
    password = "アカウントパスワード"

    msg = EmailMessage()
    msg["Subject"] = "表題"
    msg["To"] = "宛先"
    msg["From"] = "差出人"
    msg.set_content("本文")

    if buf != "":
        buf.seek(0)
        bytes_data = buf.read()
        # 画像の添付
        msg.add_attachment(bytes_data, maintype='image', subtype='jpeg', filename='image.jpg')

    # SMTPサーバーの設定
    server = smtplib.SMTP("サーバーuri", 587)

    server.login(account, password)
    server.send_message(msg)
    server.quit()
    
if __name__=="__main__":
    from PIL import Image
    img = Image.open("hoge.jpg")
    buf = pil_to_bytes(img)
    smpt_send(buf)

Python

Posted by sena