搜索文本文件和电子邮件结果

时间:2016-09-27 03:50:27

标签: python

使用文本文件搜索字符串,然后通过电子邮件发送几行代码。

我有搜索工作,它打印正确的行 电子邮件成功发送,但它只包含输出的最后一行

有什么想法?

File.txt

first
second
thrid
------------------------------------------------------------------------------
after first
after second 
after thrid 
after forth 
after fifth
after sixth

我的代码

import smtplib

from email.mime.text import MIMEText

from_address = "fromaddress@domain.com"
to_address = "toaddress@domain.com"


with open("file.txt", "r") as f:
    searchlines = f.readlines()
    for i, line in enumerate(searchlines):
        if "------------------------------------------------------------------------------" in line:
            for l in searchlines[i:i+6]: print l,
            output = l

            msg = MIMEText(output)
            msg['Subject'] = "Test email"
            msg['From'] = from_address
            msg['To'] = to_address

            body = output

            # Send the message via local SMTP server.
            s = smtplib.SMTP('smtp.domain.com', '8025')

            s.sendmail(from_address, to_address, msg.as_string())

            s.quit()

通过打印输出:

------------------------------------------------------------------------------
after first
after second 
after thrid 
after forth 
after fifth

电子邮件仅包含在正文中

after fifth

2 个答案:

答案 0 :(得分:1)

你的缩进是不可靠的。循环应收集行,然后您应该在收集所有行后发送电子邮件。

output = l

真正的错误是l只会在最里面的for l循环之后收集break的最后一个值,但重组程序时不应该只在循环中执行操作发生一次(反之亦然!)希望也能让它更清晰。

如果可以有多个结果,只需删除{{1}}就不够了 - 这将以不同的形式恢复原始错误,其中只发送六行的最后一个匹配。如果您需要支持多个结果,您的代码需要以某种方式将它们组合成一个消息。

答案 1 :(得分:-1)

你的for循环打印所有行,但循环结束,l设置为循环中的最后一项:第五个

然后你通过电子邮件发送最后一个