Python - HTML SMTP电子邮件中的嵌入式图像

时间:2018-01-20 20:42:18

标签: python html

我正在使用Python smtplib生成电子邮件,我正在尝试重新创建一个签名,放在每封电子邮件的底部。以下是对此签名的高度详细和精湛的再现:

signature

我已经弄明白了。

body = """\
    <html>
        <head></head>
        <body>
            stuff
        </body>
    </html>
    """

然后我附上消息:

message_body = MIMEText(body, 'html')

message.attach(message_body)

我似乎无法弄清楚如何嵌入图像,使它们的格式如上图所示。图片中的线条只是为了显示对齐方式,但签名本身并不存在。图像还包含超链接。

我尝试过将其添加到<body>标记的最后,以至少重新创建底部的较小图片:

<img src="C:\Users\Me\Desktop\image1.png">

<img src="C:\Users\Me\Desktop\image2.png">

我没有收到任何错误,但发送电子邮件时也没有显示任何错误。我不知道如何开始格式化应该位于签名文本左侧的较大图像。

我可以使用MIMEImage成功地将这些图片作为附件包含在电子邮件中,但我不希望它们作为附件,因此无效。

如上所述嵌入图像后,我假设我可以像这样添加超链接:

<a href="https://www.example.com">
<img src="img1.png" alt="example.com">
</a>

我是HTML的新手,所以这些对我来说都是未知的水域,我不知道该怎么办。我在这里阅读了很多问题,也提到了base64编码,但我不知道它是否适用于这种情况。

任何帮助将不胜感激。谢谢!

修改:发布新问题here,解决了编码和发送后,已发送电子邮件中的图片显示为空白的问题。

1 个答案:

答案 0 :(得分:1)

如果你想在你的html中使用嵌入式图像,你需要先对它们进行base64编码。

html图片标记看起来像这样

<img src="data:image/jpg;base64,THEBASE64CODE" alt="image"high="30" width="30" />

你必须阅读图像文件并使用pythons base64对其进行base64编码。

否则,您需要在网页中引用包含图片的资源。

<img src="http://yourwebserver.org/image.jpg" alt="image" high="30" width="30" />

第一个解决方案需要在每封电子邮件中发送您的图片。这会增加电子邮件的大小。

第二个解决方案需要有一个公共网络资源,接收系统会在打开电子邮件后加载图像(如果他/她的电子邮件程序没有阻止它)。

在您的情况下,我会尝试使用您首选的编辑器和webbrowser以简单的html设计电子邮件。此后,我将尝试使用给定的解决方案之一修改img-Tags。

为电子邮件设计提供了一些额外的信息:

Html表对于构造数据表示非常有用

<table border="1" >

<tr>
    <td>IMG left</td>
    <td colspan="2">

        your text that could be very long and usefull to your recipient<br><br>
        you should encode the mail text for html within your python application<br><br>

        otherwise you will have problems with newline and so on.
    </td>
<tr>
    <td></td>
    <td>IMG center</td>
    <td>IMG rigth</td>
</tr>
</table>

用img-Tag替换IMG。将您的邮件文本放入文本部分。删除边框=&#34; 1&#34;删除html表的边框。

对于HTML编码,请查看pythons HTMLParser