Как регистрировать содержимое электронных писем, чтобы повторные электронные письма больше не отправлялись? - PullRequest
0 голосов
/ 02 марта 2020

Я использую этот код для очистки данных шансов. Он отправляет мне электронное письмо каждый раз, когда между букмекерами возникают разногласия. Я запускаю код несколько раз каждый день вручную через терминал. Когда я запускаю код несколько раз в день, я получаю много повторяющихся писем с одинаковыми случаями расхождений шансов. Содержание писем точно такое же, за исключением строки темы, которая отображает время отправки писем. Есть ли возможность регистрировать содержимое электронных писем, чтобы код не отправлял одинаковые электронные письма? Я хотел бы предотвратить отправку электронных писем, а не просто отфильтровывать их после отправки через Gmail. Код также должен обновлять sh каждый день, чтобы очистить журнал содержимого. Извините за сложный вопрос.

1 Ответ

1 голос
/ 02 марта 2020

Вы можете записывать данные в файл CSV в режиме добавления при каждом отправлении электронного письма. Это можно сделать с помощью Python [CSV module] [1]. Если файл CSV существует, прочитайте его и убедитесь, что значения еще не записаны в этот файл. Назовите файл с текущей датой. Таким образом, вы можете хранить или удалять журналы по мере необходимости. Я предполагаю, что переменными, которые вы хотите проверить, являются dfm2 и dfm3, но вы можете заменить любые другие переменные, которые вам нужно проверить. Это хорошая идея прочитать эту ссылку, чтобы убедиться, что она настроена так, как вы хотите, чтобы она работала. Существуют и другие параметры ведения журнала, но использование CSV-файла является простым решением.

from datetime import datetime
from os import path
import csv

# your code prior to below line here
dfmerge5 = dfmerge1.loc[dfmerge1['ComparedOdds'] == 1, 'AvgOdds'].values
csv_file = f'<path to log file>/odds-log-{datetime.today().strftime("%d-%m")}.csv')

for dfm2, dfm3, dfm4, dfm5 in zip(dfmerge2, dfmerge3, dfmerge4, dfmerge5):
    mail_sent = False
    if path.isfile(csv_file):
        with open(csv_file, 'r') as r_file:
            c_reader = csv.reader(r_file)
            for row in c_reader:
               if dfm2 in row and dfm3 in row:
                   mail_sent = True
    if not mail_sent:
        with open(csv_file, 'a') as w_file:
        c_writer = csv.writer(w_file)
        c_writer.writerow([dfm2, dfm3])
        dt = datetime.now()
        subject = f'Overlay - {dt}'
        body = f'Hi Harrison,\n\nYou have one overlay:\n\nFor {dfm2} in {dfm3}, Bet365 are displaying odds of ${dfm4}, where as the average odds are          ${dfm5}.\n\nBest of luck.'
        message = f'Subject: {subject}\n\n{body}'
        mail = smtplib.SMTP('smtp.gmail.com', 587)
        mail.ehlo()
        mail.starttls()
        mail.login
        mail.sendmail(message)
        mail.close()

  [1]: https://docs.python.org/3/library/csv.html#csv.writer
...