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>"
我正在尝试自动化电子邮件发送过程。这封电子邮件应该在其正文上有图像。在下面的代码中,我将图像放在电子邮件 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>"