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



我试图自动化电子邮件发送过程。这封邮件的正文应该有一张图片。在下面的代码中,我已经将图像放在了电子邮件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()

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

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

您需要将图像附加到邮件项目,并在消息中使用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'

收件人上没有这样的路径,对吧?:(

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

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

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

3-在附件上传递图像

最新更新