Я не могу добавить изображение в тело электронной почты с помощью python, я могу добавить изображение в качестве вложения, но я хочу, чтобы код добавлял изображение в тело письма

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()

Я могу прикрепить изображение, но я хочу вставить это изображение в тело сообщения электронной почты.

заранее спасибо


person Mayank Shivhare    schedule 14.06.2017    source источник


Ответы (2)


Создайте вложение и задайте свойство PR_ATTACH_CONTENT_ID (имя DASL "http://schemas.microsoft.com/mapi/proptag/0x3712001F") с помощью Attachment.PropertyAccessor.

Ваше свойство HTML body (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>"
person Dmitry Streblechenko    schedule 18.06.2017
comment
Да, это должна быть почта. - person Dmitry Streblechenko; 19.06.2017

Вы можете использовать HTML-тег <img>:

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

И вы можете поместить тег в свой HTML-контент.

Не забудьте импортировать необходимые модули:

import base64
person Mahdi Perfect    schedule 14.06.2017
comment
@DmitryStreblechenko это работает, если формат тела письма в html - person alwbtc; 11.06.2019
comment
Это не работает в настольной версии Outlook, где Word отображает HTML-сообщения. - person Dmitry Streblechenko; 11.06.2019
comment
@DmitryStreblechenko: Не похоже на правду (все работает нормально) на сегодняшний день (последний Outlook из Office365). - person Gaëtan de Menten; 27.01.2021