解决Outlook邮件中<img>标签含空格绝对路径的图片加载问题
问题:Outlook嵌入本地带空格路径图片失败
我用.htm文件配合win32com.client包创建Outlook邮件,需要在正文嵌入本地图片。目标图片的绝对路径为:C:/Users/User/AppData/Roaming/Microsoft/Signatures/some folder/image.gif,对应的.htm文件中img标签内容是:
<img src='C:/Users/User/AppData/Roaming/Microsoft/Signatures/some%20folder/image.gif'>
尝试执行以下代码后,生成的邮件无法显示图片:
from bs4 import BeautifulSoup import re htm_path = 'C:/Users/User/AppData/Roaming/Microsoft/Signatures/signature.htm' with open(htm_path, 'r', encoding='utf-8') as htm_file: soup = BeautifulSoup(htm_file.read(), 'html.parser') for img in soup.findAll('img'): img['src'] = re.sub('%20', ' ', img['src'])
我确认问题出在图片绝对路径里的空格。如果修改代码把%20替换为空,同时把实际目录名的空格去掉(路径改为C:/Users/User/AppData/Roaming/Microsoft/Signatures/somefolder/image.gif),脚本就能正常运行,图片可以正常嵌入邮件正文,对应的代码如下:
from bs4 import BeautifulSoup import re htm_path = 'C:/Users/User/AppData/Roaming/Microsoft/Signatures/signature.htm' with open(htm_path, 'r', encoding='utf-8') as htm_file: soup = BeautifulSoup(htm_file.read(), 'html.parser') for img in soup.findAll('img'): img['src'] = re.sub('%20', '', img['src'])
我搜索过相关解决方案,但没找到针对本地绝对路径含空格场景的有效方法,希望能得到帮助。注:必须在.htm文件中指定图片的绝对路径,否则Outlook无法找到文件。
编辑(解决方案)
@MattieTK提出的方案需要将图片上传到服务器(比如Imgur),但我的脚本要分发给同事,且每位用户的图片文件名一致,这个方案不适用。我自己找到一个简单的解决方法:如果图片所在的相对路径包含空格,就在HTML文件的同目录下复制该目录(包含图片),复制后的目录名去掉空格即可。
内容的提问来源于stack exchange,提问作者Tevzi
相关产品推荐
相关产品推荐

