【问题标题】:win32com send email with multiple embedded imagewin32com 发送带有多个嵌入图像的电子邮件
【发布时间】:2019-12-22 15:54:35
【问题描述】:
outlook = win32com.client as win32
mail = outlook.CreateItem(0)

for j in range(list)
    file = "C:desktop\\image{}.png".format(j)
    attachment = mail.Attachments.Add(file)
    index = "ID{}".format(j)
    attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", index)

mail.HTMLBody = "<html><body> image <img src = ""cid:ID%s""></body></html>" % (j)

mail.Send()

目的是将所有图像(0、1、2、...由“列表”定义的最大数量)嵌入到电子邮件中。但现在卡在 for 循环中。请问有没有什么方法可以达到这个目的?谢谢!

【问题讨论】:

    标签: python html-email


    【解决方案1】:

    经过对互联网的深入研究,我找到了解决这个特殊问题的答案。解决方案是导入 base64 并使用它生成图像标签。我将在这里发布我的代码,以便您自己尝试。

    import win32com.client as win32
    import base64
    
    def send_email(subject, text, list_img_paths):
    
        outlook = win32.Dispatch('outlook.application')
        myItem = outlook.CreateItem(0)
    
        myItem.Subject = subject
        list_email_img = []
        img_tag = ''
        for i in range(len(list_img_paths)):
            list_email_img.append(base64.b64encode(open(list_img_paths[i], 'rb').read()).decode('utf-8').replace('\n',''))
            img_tag +='<img alt="" src="data:image/png;base64,{}"/>'.format(list_email_img[i])
        myItem.HtmlBody = """\
        <html>
        <head>{}</head>
        <body>
        <p>{}<br>
        </p>
        </body>
        </html>
        """.format(text, img_tag)
        myItem.To = "example@company.com"
        myItem.CC = 'example@example.org'
        myItem.Display()
        myItem.Send()
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2012-04-07
      • 2021-10-31
      • 1970-01-01
      • 2015-07-29
      • 2014-01-25
      • 2011-04-16
      • 2012-12-08
      • 1970-01-01
      相关资源
      最近更新 更多