当前位置: 首页 > 知识库问答 >
问题:

MIMEImage未显示在电子邮件正文中/试图在电子邮件中嵌入图像

贺立果
2023-03-14

我正在尝试在电子邮件中嵌入一个图像。我遵循了这里,这里和这里的例子和其他但我不能得到图像显示。

    import smtplib
    import os

    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage

    logo = 'mylogo.png'
    msg = MIMEMultipart('alternative')
    msg['Subject'] = "Link"
    msg['From'] = 'sender@email.com'
    msg['To'] = 'recipient@email.com'

    html = """\
    <html>
      <head></head>
    <body>
      <p>GREETING<br><br>
       SOME TEXT<br>
       MORE TEXT<br><br>
       FAREWELL <br><br>
       DISCLAIMER
    </p>
    <img src="cid:image1" alt="Logo" \>
    </body>
    </html> """

    part1 = MIMEText(text, 'plain')
    part2 = MIMEText(html, 'html', 'utf-8')

    msg.attach(part1)
    msg.attach(part2)

    fp = open(logo, 'rb')
    msgImage = MIMEImage(fp.read())
    fp.close()

    msgImage.add_header('Content-ID', '<image1>')
    msgImage.add_header('Content-Disposition', 'inline', filename=os.path.basename(logo))
    msgImage.add_header("Content-Transfer-Encoding", "base64")
    msg.attach(msgImage)

    s = smtplib.SMTP(smtp_server,25)
    s.sendmail(sender, recipient, msg.as_string())
    s.quit()

当我执行这个时,我得到的是一个空空如也的身体,里面有一个红十字,没有任何图像。如何使图像与电子邮件正文内联显示?

我正在使用Outlook 2016。我知道我可以在使用Outlook时插入图片,我也收到过别人在文本中插入图片的“正常”电子邮件,所以这肯定意味着我必须能够查看python脚本生成的图片?

编辑:我已经看了这里给出的解决方案,建议作为一个可能的重复,但这也没有解决我的问题。

共有1个答案

杜楚
2023-03-14

我在《Outlook2013》中找到了一个解决方案:

Outlook似乎在寻找span标记,以及一些图像信息,如高度和宽度(现在是硬编码的)和id等(见下文),我将我的图像包装在这个html文本中,然后还添加了图像作为附件,使用相同的数字,我用于cid和id。然后图像在Outlook中显示为嵌入式文件。

    # loop through all uploaded files and add as attachments
    for index, file in enumerate(attachment):
       with open(file, "rb") as fp:
          data = fp.read()
          fileType = os.path.splitext(file)[-1].strip(".")

          ctype, _ = mimetypes.guess_type(file)

          if embedImages and "image/" in ctype:
             image = Image.open(data)
             # Build out the html for the email
             message += '<span style = "mso-no-proof:yes"><img width = 1280 height = 1920 id = "%s" src = "cid:%s"></span>' % (index, index)
             # Define the image's ID
             msgImage = MIMEImage(data, _subtype=fileType)
             msgImage.add_header('Content-ID', '<%s>' % index)
             msg.attach(msgImage)
             att = MIMEApplication(data, _subtype=fileType)
             att.add_header("Content-Disposition", "attachment", filename="%s" % index)
             msg.attach(att)
        else:
             att = MIMEApplication(data, _subtype=fileType)
             att.add_header("Content-Disposition", "attachment", filename=fileName)
             msg.attach(att)
        fp.close()

        # Attach html text
        if message:
            if embedImages or "mimeType" in kwargs:
                msg.attach(MIMEText(message, kwargs["mimeType"], 'utf-8'))
            else:
                msg.attach(MIMEText(message, "plain", 'utf-8'))
 类似资料:
  • 问题内容: 注意:我不想将图像附加到电子邮件 我想在电子邮件正文中显示图片, 我已经尝试了HTML image标签,并且得到了输出,正如您在此中看到的关于如何在电子邮件正文中添加图像的问题一样,我很累。 它对我不起作用,它也给我相同的输出,所以我怀疑是否可以这样做, 我的密码 更新1: 如果我使用该代码,则可以获取文本和图像,但无法在电子邮件正文中看到图像 这是我的代码: 更新2: 我使用了粗体标

  • 问题内容: 我需要在电子邮件中嵌入图像。我该怎么做? 我既不想使用第三方工具,也不想对特定于语言的答案感兴趣(但是如果您想知道的话,它就是PHP)。 我只对生成的电子邮件正文的格式感兴趣。 问题答案: 如您所知,作为电子邮件传递的所有内容都必须文本化。 您必须创建包含多部分/ mime消息的电子邮件。 如果要添加物理图像,则该图像必须使用base 64编码并分配了Content-ID(cid)。如

  • 问题内容: 我目前有一个程序,可以从列表中随机选择引号并通过电子邮件发送。我现在也尝试在电子邮件中嵌入图片。我遇到了一个问题,可以附加电子邮件,但报价不再起作用。我已经在网上进行了研究,但解决方案对我不起作用。请注意,我使用的是Python 3.2.2。 任何指导将不胜感激。 从上面的代码可以看出,我尝试了不同的方法(引用#) 问题答案: 您正在费力地在中构造有效的MIME消息,然后放弃它并发送一

  • 我正在使用spring Boot从java发送HTML电子邮件。电子邮件包括签名与我们公司的形象标志。它工作得很好。在Gmail上。但在MacOS应用程序电子邮件中,徽标是作为附件发送的,而不是内联的。 代码的非相关部分替换为...

  • 问题内容: 我正在尝试发送包含嵌入式gif图像的多部分/相关html电子邮件。该电子邮件是使用Oracle PL / SQL生成的。我的尝试失败了,图片显示为红色X(在Outlook 2007和yahoo邮件中) 我已经发送HTML电子邮件已有一段时间了,但是我现在的要求是在电子邮件中使用多个gif图像。我可以将它们存储在我们的一台Web服务器上并仅链接到它们,但是许多用户的电子邮件客户端不会自动

  • 问题内容: 我想在电子邮件正文中添加图片。我不想将图像附加到电子邮件,但要在电子邮件正文中添加图像。 这个怎么做? 我正在用这个。 要么 然后像这样显示图像 问题答案: 不幸的是,使用Intents不可能做到这一点。 为什么例如粗体文本显示在EditText上,而不是一个形象的原因是StyleSplan 正在实施Parcelable 而ImageSpan 没有。因此,当在新的Activity中检索