HTML 嵌入本地图像的电子邮件正文

HTML email body with embedded local image

我正在尝试自动化电子邮件发送过程。这封电子邮件应该在其正文上有图像。在下面的代码中,我将图像放在电子邮件 html 正文中。由于图像路径在我的本地机器上,收件人不会在电子邮件正文中收到它,它只会出现在电子邮件发送给我自己的情况下。 这里有人知道如何解决这个问题吗?

import win32com.client as win32

outlook = win32.Dispatch('outlook.application')

mail = outlook.CreateItem(0)

recipients = 'example@gmail.com'

cropped_image = r'C:\Users\Antonio_Ravazzolo\PycharmProjects\AutomationDFS\cropped_screenshot.png'

mail.To = recipients
mail.Subject = 'subject'
mail.HTMLBody = r'<img src="C:\Users\Antonio_Ravazzolo\PycharmProjects\AutomationDFS\cropped_screenshot.png">'\
                '<p>Feel free to contact me in case you have any questions/doubts.<p>'\
                '<p>Regards, Antônio Ravazzolo.<p>'


mail.Send()

问题是您是唯一访问图像路径的人,并且在该路径上,您有图像。 其他计算机上没有路径,就好像您通过其他计算机中的电子邮件传递它一样。 你可以通过以下方式解决它:

1- 您可以将图像保存在 static 文件夹中。 (如果你使用 Flask 或 Django 作为后端)

2- 或将其上传到云端并从那里授予访问权限。

3-把图片传上附件

您需要将图像附加到邮件项目,并在邮件中使用 cid 符号来引用 HTML 标记中的嵌入图像。

mail.Attachments.Add "D:\ImageFile.img", olByValue, 0
sImgName = "ImageFile.img" 
mail.HTMLBody = "<img src='cid:" & sImgName & "'" & " ><br>" 

否则,本地路径仅对您的机器有意义:

cropped_image = r'C:\Users\Antonio_Ravazzolo\PycharmProjects\AutomationDFS\cropped_screenshot.png'

收件人上没有这个路径吧? :)

您需要使用 Attachment.PropertyAccessor.SetProperty 设置 PR_ATTACH_CONTENT_ID MAPI 属性(DASL 名称 "http://schemas.microsoft.com/mapi/proptag/0x3712001F")并通过匹配的 src 属性引用该附件在附件上设置的 PR_ATTACH_CONTENT_ID 的值:

attachment = MailItem.Attachments.Add("c:\temp\MyPicture.jpg")
attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", "MyId1")
MailItem.HTMLBody = "<html><body>Test image <img src=""cid:MyId1""></body></html>"