【问题标题】:Collect multiple html files in a single email message在一封电子邮件中收集多个 html 文件
【发布时间】:2016-05-08 23:39:56
【问题描述】:
str_htmlHeader = "<!DOCTYPE HTML PUBLIC>\n<html>\n";
str_htmlHeader += "<head>\n\t<title>Audi Cloud Services</title>\n</head>\n\n";
str_htmlHeader += "<body>\n\n<h1>Nightly build test results</h1>\n";
str_htmlFooter = "\n</body>\n\n</html>";

for root, dirnames, filenames in os.walk(r'\\ac-srvfile01\_Embedded\VCon1\proj_customer\337159_Audi_ACR_and_TSSS\pcm-audio'):
    for filename in fnmatch.filter(filenames, '*.html'):
        reportContent = open(os.path.join(root,filename)).read()
        attachment = MIMEText(str_htmlHeader+reportContent+str_htmlFooter, 'html')
        msg.attach(attachment)

        #msg.attach(MIMEText(open(filename).read(), "text/html"))

我正在将消息发送给相关人员,但电子邮件将通过另一封电子邮件发送给受尊敬的人。我想收集所有报告并将其作为一封电子邮件发送。但上面的代码将报告作为不同的电子邮件发送。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 消息格式发送正确。我现在可以发送消息了。但是消息作为单独的电子邮件发送,但我想将其作为单个电子邮件发送。我编辑了我的代码
  • 此代码发送一封电子邮件,其中包含一个 HTML 部分。多部分容器无用但无害。目前尚不清楚您希望此消息应包含哪些其他部分,以及您仍未向我们展示的代码中可能发送的其他哪些消息。
  • 首先,它读取html消息并将其作为消息发送给相关人员。我想一次收集所有 html 消息或多条消息,然后作为电子邮件发送一次。而不是作为单独的电子邮件发送。我编辑了我的代码。一旦它读取了 html 消息,它就会作为电子邮件发送。但我想阅读几条或全部 html 消息并将其作为一封电子邮件发送

标签: python python-2.7 email concatenation smtplib


【解决方案1】:

您想要创建单个容器消息,然后在循环中添加 MIME 部分。

multipart/alternative 容器不适合这种情况,因为它表明客户端应该选择其中一个部分进行显示,而忽略其余部分。我改用multipart/related。您可能更喜欢multipart/mixed,这并不意味着各部分之间存在某种关系。

str_htmlHeader = '''<!DOCTYPE HTML PUBLIC>
<html>
<head><title>Audvices</title></head>
<body><h1>Nightt results</h1>'''
str_htmlFooter = '''"
</body>\n\n</html>'''

msg = MIMEMultipart('related')
msg['From'] = 'ucd_test'
msg['To'] = 'hemappa@nce.com'
msg['Subject'] = 'AUDICES'

for root, dirnames, filenames in os.walk(r'\\ac-srvR_and_TSSS\pcm-audio'):
    for filename in fnmatch.filter(filenames, '*.html'):
    reportContent = open(os.path.join(root,filename)).read()
    attachment = MIMEText(str_htmlHeader+reportContent+str_htmlFooter, 'html')
    attachment.add_header("Content-Disposition", "attachment",\
                filename=os.path.basename(filename))
    msg.attach(attachment)

server = smtplib.SMTP('eu-smtp.nuance.com')
server.ehlo()
#server.starttls()
#server.login(username,password)
server.sendmail(fromaddress,toaddress.split(','),msg.as_string())
server.quit()

【讨论】:

  • 我如上修改了我的代码。但它不工作。感谢您的回复。
  • 它只是发送一封没有任何内容的电子邮件。
  • 然后我想os.walk 没有找到任何匹配的文件。你的问题没有表明任何问题,所以我认为这部分工作正常。
  • 我收到错误为: Traceback(最近一次调用最后一次):文件“Test_Report.py”,第 26 行,在 reportContent = open(filename).read() IOError: [ Errno 2] 没有这样的文件或目录:'report_email.html' 错误级别为 1
  • 更新了快速修复。感谢您的跟进。
猜你喜欢
  • 2015-10-13
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 2015-05-13
  • 2015-05-17
  • 2017-03-30
  • 1970-01-01
  • 2019-05-18
相关资源
最近更新 更多