使用Win32 Python发HTML邮件时其他收件人无法查看图片的解决方法
解决建议
问题出在你直接引用了本地文件路径E:\\html5.gif——这个路径只在你的电脑上有效,收件人设备里没有这个文件,所以无法加载图片。正确的做法是把图片作为嵌入式附件加入邮件,再通过cid(Content ID)在HTML中引用它。
修改后的代码如下:
import win32com.client as win32 from win32com.client import constants olApp = win32.Dispatch('Outlook.Application') olNS = olApp.GetNameSpace('MAPI') mailItem = olApp.CreateItem(0) mailItem.Subject = 'test daily Email' mailItem.BodyFormat = 1 # olFormatHTML mailItem.To = 'testing it with my myself@outlook.com' mailItem.Cc = 'others recepient@outlook.com' # 添加图片作为嵌入式附件 attachment = mailItem.Attachments.Add( Source="E:\\html5.gif", Type=constants.olByValue, # 指定为嵌入类型 Position=0 ) # 设置附件的ContentID,用于HTML引用 attachment.PropertyAccessor.SetProperty( "http://schemas.microsoft.com/mapi/proptag/0x3712001F", "html5icon" # 这个ID要和HTML里的cid对应 ) # HTML中用cid引用图片 mailItem.htmlBody = '''\ <html> <body> <h2>This is just a test</h2> <p>Using it for test before production</p> <img src="cid:html5icon" alt="HTML5 Icon" style="width:128px;height:128px;"> </body> </html> ''' mailItem.Save() mailItem.Send()
关键说明:
constants.olByValue确保附件作为邮件内容的一部分嵌入,而非独立的附件显示。- 给附件设置的
ContentID(这里是html5icon)要和HTML里src="cid:xxx"的xxx完全一致。 - 这样收件人打开邮件时,图片会从邮件的嵌入式附件中加载,无需访问你的本地文件。
内容的提问来源于stack exchange,提问作者Mrc Rblr
相关产品推荐
相关产品推荐

