使用Mailjet API和Python将内联图像插入电子邮件

2024-06-16 09:56:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Mailjet并尝试将以编程方式生成的图像插入电子邮件正文。不幸的是,我没有看到身体中的图像,而是测试它时得到的结果:

enter image description here

图像未显示,下载和查看附件也不起作用

我一直在文档和{a3}中处理{a2}问题,但没有成功

我的代码如下:

import os
from mailjet_rest import Client
import numpy as np
import plotly.graph_objects as go
import base64

MAILJET_KEY = os.environ.get("MAILJET_KEY")
MAILJET_SECRET = os.environ.get("MAILJET_SECRET")
mailjet = Client(auth=(MAILJET_KEY, MAILJET_SECRET), version='v3.1')

filename = 'sample1.png'
# Plotly code taken from: https://plotly.com/python/static-image-export/
N = 100
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
sz = np.random.rand(N) * 30

fig = go.Figure()
fig.add_trace(go.Scatter(
    x=x,
    y=y,
    mode="markers",
    marker=go.scatter.Marker(
        size=sz,
        color=colors,
        opacity=0.6,
        colorscale="Viridis"
    )
))

# Save image
fig.write_image(filename)

# Base64 Encode
with open(filename, 'rb') as file:
    encode64 = base64.b64encode(file.read())

cid = "id1"
data = {
    'Messages': [
        {
            "From": {
                "Email": "myemail@mydomain.com",
                "Name": "Mailjet API Image Test"
        },
            "To": [{
                "Email": "myemail@gmail.com",
                "Name": "My Name"
            }],
            "Subject": "Can I insert an image inline?",
            "TextPart": "Here's a random plot for your enjoyment!",
            "HTMLPart": ("<h3>We're putting an image inline:<br/>" +
                        f"<img src=\"cid:{cid}\">" +
                        "<br/>Other text below."),
            "InlinedAttachments": [{
                "ContentType": "image/png",
                "Filename": filename,
                "ContentID": cid,
                "Base64Content": str(encode64)
            }]
        }
    ]
}
result = mailjet.send.create(data=data)

Tags: key图像imageimportgosecretosas