我无法在 python 中使用 email.message 在电子邮件正文中添加图像

Posted

技术标签:

【中文标题】我无法在 python 中使用 email.message 在电子邮件正文中添加图像【英文标题】:I'm not able to add an image in email body using email.message in python 【发布时间】:2021-10-31 09:40:37 【问题描述】:
import smtplib
import email.message

def sent_email(From,email,passw):  
    body = f"""
    <p>Text blabla </p>
    <img src="image_name.jpg"  width=400 height=560>
    """

    msg = email.message.Message()
    msg['Subject'] = "subject"
    msg['From'] = From
    msg['To'] = email
    password = passw
    msg.add_header('Content-Type', 'text/html')
    msg.set_payload(body )

    s = smtplib.SMTP('smtp.gmail.com: 587')
    s.starttls()
    # Login Credentials for sending the mail
    s.login(msg['From'], password)
    s.sendmail(msg['From'], [msg['To']], msg.as_string().encode('utf-8'))
    print('Email sent')

电子邮件已发送,但图像未出现。出现“加载问题”消息。

刚刚找到如何附加。我想要它在电子邮件的正文中。

【问题讨论】:

您是否尝试过附加图片,即msg.add_header('Content-Disposition', 'attachment', filename='image_name.jpg') 和/或`msg.add_attachment(*args, content_manager=None, **kw)¶`?您的 html 呈现页面,但您有权访问图像?如果您的电子邮件服务允许,另一种选择是使用远程 URL。我还会看一个工作示例,看看您的电子邮件如何比较。 我可以访问图像。 msg.add_header(...) 附加图像。但不在电子邮件正文中。 【参考方案1】:

为了链接到电子邮件中的附加图片,您必须使用以“cid:”开头的特殊 URL。在这里检查:

Embedding attached images in HTML emails

【讨论】:

这不是最好的方法。并非所有电子邮件应用程序都支持这种使用 base64 编码的方法,请参阅caniemail.com/features/image-base64 我说的不是这个。我说的是作为单独的 MIME 部分附加的图像,以及带有src="cid:myimage.png" 的图像标签。这在 RFC 1813 中,支持几乎是普遍的。 好吧,看来 CID 不一定是 base64 编码。然而,说不是所有的电子邮件应用程序都支持这种方法是正确的——尤其是网络邮件。据 SendGrid sendgrid.com/blog/embedding-images-emails-facts 和 MailTrap mailtrap.io/blog/… 报道【参考方案2】:

这可能就像将图像上传到可公开访问的网络服务器一样简单,并使用它的完整路径,即不是src="image_name.jpg",而是src="https://www.imageserver.com/folder/image_name.jpg"

【讨论】:

非常感谢。非常简单,而且很有效。

以上是关于我无法在 python 中使用 email.message 在电子邮件正文中添加图像的主要内容,如果未能解决你的问题,请参考以下文章

我无法在我的 Python 项目中使用多线程

无法在 Windows 7 中使用 Python 启动 PhantomJS

无法在Python中使用Happybase创建简单表

无法在 Heroku 教程中使用 Python 启动工头

我无法在使用 Python 3 的函数中结束我的 WHILE 循环

无法使用 SWIG 在 Python 中实例化 C++ 类(获取属性错误)