Python 如何记录电子邮件内容以避免重复电子邮件';你不会再发了吧?

Python 如何记录电子邮件内容以避免重复电子邮件';你不会再发了吧?,python,email,logging,Python,Email,Logging,我使用此代码来获取赔率数据。每当收受赌注者之间的赔率出现差异时,它就会给我发一封电子邮件。我每天通过终端手动运行代码多次。当我每天多次运行代码时,我会收到许多重复的电子邮件,它们都是相同的概率差异实例。电子邮件的内容完全相同,只是主题行显示了电子邮件发送的时间。是否有记录电子邮件内容的方法,以防止发送相同的电子邮件?我想防止电子邮件被发送,而不仅仅是在通过Gmail发送后过滤掉它们。代码还必须每天刷新,以便清空内容日志。对不起,这个问题很复杂 您可以在每次发送电子邮件时以附加模式将数据记录到CS

我使用此代码来获取赔率数据。每当收受赌注者之间的赔率出现差异时,它就会给我发一封电子邮件。我每天通过终端手动运行代码多次。当我每天多次运行代码时,我会收到许多重复的电子邮件,它们都是相同的概率差异实例。电子邮件的内容完全相同,只是主题行显示了电子邮件发送的时间。是否有记录电子邮件内容的方法,以防止发送相同的电子邮件?我想防止电子邮件被发送,而不仅仅是在通过Gmail发送后过滤掉它们。代码还必须每天刷新,以便清空内容日志。对不起,这个问题很复杂

您可以在每次发送电子邮件时以附加模式将数据记录到CSV文件中。这可以使用Python的[CSV模块][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
从日期时间导入日期时间
从操作系统导入路径
导入csv
#您的代码位于下面一行之前
dfmerge5=dfmerge1.loc[dfmerge1['comparedods']==1'AvgOdds'].值
csv_file=f'/dofficies log-{datetime.today().strftime(“%d-%m”)}.csv')
对于zip中的dfm2、dfm3、dfm4、dfm5(dfmerge2、dfmerge3、dfmerge4、dfmerge5):
已发送邮件=错误
如果路径.isfile(csv\u文件):
打开(csv_文件,'r')作为r_文件:
c_reader=csv.reader(r_文件)
对于c_读取器中的行:
如果dfm2在行,dfm3在行:
已发送邮件=True
如果未发送邮件:
打开(csv_文件,'a')作为w_文件:
c_writer=csv.writer(w_文件)
c_writer.writerow([dfm2,dfm3])
dt=datetime.now()
subject=f'Overlay-{dt}'
body=f'Hi Harrison,\n\n您有一个覆盖:\n\n对于{dfm3}中的{dfm2},Bet365显示${dfm4}的赔率,其中平均赔率为${dfm5}。\n\n祝您好运。”
message=f'Subject:{Subject}\n\n{body}'
mail=smtplib.SMTP('SMTP.gmail.com',587)
mail.ehlo()
mail.starttls()
mail.login
mail.sendmail(消息)
mail.close()
[1]: https://docs.python.org/3/library/csv.html#csv.writer

您可以使用DataFrame而不是log来保存这些信息。最好只记录内容的散列,而不是内容本身。这避免了数据泄漏,节省了存储空间,而且比较也更容易。当我把代码放进去时,我就知道了。csvfile='赔率.csv/赔率日志-{0}'。格式(datetime.today().strftime('%-d_uUm'))值错误:无效的格式字符串您必须创建csv文件还是代码可以为您创建csv文件?另外,我是否使用了整个电子邮件发送代码,我应该将其粘贴到哪里?在新行上或在c_writer.writerow([dfmerge2[0],dfmerge3[0]])之后缩进,我不确定为什么会得到无效的格式字符串。检查datetime导入是否正确。如果无法使其工作,则可以用另一种方式(而不是格式)为文件名生成字符串。该代码创建csv文件。将电子邮件发送代码粘贴到注释指示的位置,缩进到if块中。with块用于将数据写入csv。谢谢,这很有效。但是,现在我得到了错误文件“C:\Users\Harrison Pollock\Desktop\Test.py”,第57行,其中open(csvfile,'a')为wfile:FileNotFoundError:[Errno 2]没有这样的文件或目录:“lobbs.csv/lobbs-log-03-03”“我不确定您的系统配置,您使用的是什么版本的python,或者发生这种情况的原因。”。csv'位于格式字符串{0}之后,
'/locks-log-{0}.csv'
,因此我看不出您是如何得到该结果的。仔细检查要使用的文件路径的格式字符串是否正确。{0}是字符串中被日期替换的部分。否则,请使用不同的方法为文件路径创建字符串。