我正在尝试在当前日期等于变量日期时发送电子邮件。
import smtplib
import datetime
date = datetime
fromaddr = "holidaysandspecialdates@gmail.com"
toaddrs = 'noah.s.cha@gmail.com'
msg = input("Enter your message:")
# Credentials (if needed)
username = ''
password = ''
date = 2015-5-24
when datetime.date.today() == date:
fromaddr = "holidaysandspecialdates@gmail.com"
toaddrs = 'noah.s.cha@gmail.com'
msg = "CodeDay Ends Today!!!"
# The actual mail send
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
print("Your message:" + "'" + msg + "'" + " has been sent to " + toaddrs + "." )
答案 0 :(得分:1)
我认为您正在寻找的是程序启动的方式,然后等到日期为2015-5-25,然后发送消息。
执行此操作的简单方法是使用一些外部调度程序 - cron
,launchd
,Scheduled Tasks
或操作系统附带的任何内容。只需将其设置为在该日期尽早运行您的程序一次。 (如果你无法弄清楚如何做到这一点,你可能会想要AskUbuntu,AskDifferent等,这取决于你所使用的平台。)
如果你真的想在Python里面这样做,你可以。你需要的是一种入睡的方法,直到2015-5-25。为此,您可以使用sleep
功能。但你需要知道睡多少秒。
import datetime
import time
target = datetime.datetime(2015, 5, 25)
time_to_sleep = target - datetime.datetime.now()
time.sleep(time_to_sleep.total_seconds())
请注意,我在2015-5-25之外创建了一个实际的date
对象;只需在代码中使用2015-5-25
,要求它从2015中减去5,然后从结果中减去25,这样就得到了整数1986,而不是日期。 (另外,我使用了datetime
而不是date
,所以它会一直睡到2015-5-25的开始,直到当天中午的任意时间。)
无论如何,这样做的一个大问题是你的程序必须坐在那里,什么都不做,好几天。如果有人意外重新启动您的计算机并且没有重新启动该程序,它将永远不会做任何事情。您的系统调度程序有办法解决该问题(系统每次打开时都会自动重新启动它,并立即检查所有计划任务以确保它没有错过任何一个),但是您没有(除非你希望每次你的系统开启直到时间结束时运行这个程序)。还存在各种较小的问题(参见JF Sebastian的一些评论),再次,您的系统调度程序已经知道如何解决,但是要么需要做更多工作,要么无法处理。
答案 1 :(得分:-1)
比较两个对象时,类型在Python中很重要
date = datetimi.date(2015, 5, 24)
if datetime.date.now().date() == date:
fromeaddr = ""
date()
调用将datetime
对象限制为date
部分
答案 2 :(得分:-2)