【问题标题】:I am not able to add an image in email body using python , I am able to add a picture as a attachment but i want a code to add image in mailbody我无法使用 python 在电子邮件正文中添加图像,我可以添加图片作为附件,但我想要一个代码来在邮件正文中添加图像
【发布时间】:2017-11-16 13:58:10
【问题描述】:
Right now I am using below code:

import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'to address'
mail.Subject = 'Message subject'
mail.Body = 'Message body'
mail.HTMLBody = '<h2>HTML Message body</h2>'# this field is optional
**mail.Attachments.Add('C:\Users\MA299445\Downloads\screenshot.png')**
mail.Send()

我可以附上一张图片,但我想将此图片粘贴到电子邮件正文中。

提前致谢

【问题讨论】:

    标签: python image email outlook win32com


    【解决方案1】:

    创建一个附件并使用Attachment.PropertyAccessor 设置PR_ATTACH_CONTENT_ID 属性(DASL 名称"http://schemas.microsoft.com/mapi/proptag/0x3712001F")。

    您的 HTML 正文 (MailItem.HTMLBody 属性)然后需要通过 cid 引用该图像附件:

    <img src="cid:xyz"/>
    

    其中 xyz 是 PR_ATTACH_CONTENT_ID 属性的值。

    使用OutlookSpy 查看现有消息(单击 IMessage 按钮)。

    attachment = mail.Attachments.Add("C:\Users\MA299445\Downloads\screenshot.png")
    attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", "MyId1")
    mail.HTMLBody = "<html><body>Test image <img src=""cid:MyId1""></body></html>"
    

    【讨论】:

    • 是的,必须是“邮件”。
    【解决方案2】:

    您可以使用&lt;img&gt; HTML 标签:

    encoded_image = base64.b64encode(image_file.getvalue()).decode("utf-8")
    html = '<img src="data:image/png;base64,%s"/>' % encoded_image
    

    您可以将标签放在您的 HTML 内容中。

    不要忘记导入所需的模块:

    import base64
    

    【讨论】:

    • @DmitryStreblechenko 如果邮件正文格式为 html 则有效
    • 它在 Word 呈现 HTML 消息的桌面版 Outlook 中不起作用。
    • @DmitryStreblechenko:截至今天(Office365 的最新 Outlook),这似乎不是真的(它工作正常)。
    猜你喜欢
    • 2021-10-31
    • 2021-12-21
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2021-10-30
    • 2014-09-28
    • 1970-01-01
    相关资源
    最近更新 更多