在Python的html电子邮件中附加多个图像



我有以下代码附加所有的图像从一个文件夹发送html电子邮件。图像是html文件的一部分,所以它们必须被附加。考虑到有10张图片,我想知道如何以更有效的方式做到这一点。

fp = open('newsletter/bar_chart.png', 'rb')
msgImage1 = MIMEImage(fp.read())
fp.close()
msgImage1.add_header('Content-ID', '<bar_chart>')
msgRoot.attach(msgImage1)
fp = open('newsletter/scatter_plot.png', 'rb')
msgImage2 = MIMEImage(fp.read())
fp.close()
msgImage.add_header('Content-ID', '<scatter_plot>')
msgRoot.attach(msgImage2)
fp = open('newsletter/image3.png', 'rb')
msgImage3 = MIMEImage(fp.read())
fp.close()
msgImage3.add_header('Content-ID', '<image3>')
msgRoot.attach(msgImage3)
fp = open('newsletter/image4.png', 'rb')
msgImage4 = MIMEImage(fp.read())
fp.close()
msgImage4.add_header('Content-ID', '<image4>')
msgRoot.attach(msgImage4)

只需保持文件名为列表,并使用for-loop对列表中的不同项重复相同的代码。

要获得不同的Content-ID,您可以简单地使用f-string,如f"<image{number}>enumerate()

filenames = [
'newsletter/bar_chart.png',
'newsletter/scatter_plot.png',
'newsletter/image3.png',
'newsletter/image4.png',
]
for number, name in enumerate(filenames, 1):
fp = open(name, 'rb')
msg_image = MIMEImage(fp.read())   # PEP8: `lower_case_names` for variables
fp.close()
msg_image.add_header('Content-ID', f'<image{number}>')
msg_root.attach(msg_image)

这样你可以从

中获取文件名:文件
  • 数据库
  • os.listdir('newsletter')
  • glob.glob('newsletter/*.png')
  • 命令行-python.exe script.py name1 name2filenames = sys.argv[1:]

最终你可以用元组(filename, content_id)创建列表

在列表中,您可以使用字符串"<image4>",或者您可以使用字符串"image4",然后使用f-string添加< >-f"<{content_id}>"

filenames = [
('newsletter/bar_chart.png', 'bar_chart'),
('newsletter/scatter_plot.png', 'scatter_plot'),
('newsletter/image3.png', 'image3'),
('newsletter/image4.png', 'image4'),
]
for name, content_id in filenames:
fp = open(name, 'rb')
msg_image = MIMEImage(fp.read())   # PEP8: `lower_case_names` for variables
fp.close()
msg_image.add_header('Content-ID', f'<{content_id}>')
msg_root.attach(msg_image)

最终您可以使用名称newsletter/bar_chart.png来创建content_id

content_id = name.split('/')[-1].split('.')[0]  

给出bar_chart


PEP 8——Python代码风格指南

相关内容

  • 没有找到相关文章

最新更新