当当前日期等于变量的日期时,我试图发送电子邮件。
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 + "." )
我认为你正在寻找的是一种程序启动的方式,然后等到日期是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())
请注意,我创建了一个实际的date
对象,而不是2015-5-25;只是在你的代码中使用2015-5-25
是要求它从2015中减去5,然后从结果中减去25,所以你得到的是整数1986,而不是日期。(另外,我使用datetime
而不是date
,所以它会一直睡眠到2015-5-25开始,而不是直到一天中的某个任意时间。)
无论如何,这样做的最大问题是你的程序不得不在那里呆上几天,什么都不做。如果有人不小心重新启动你的电脑而没有重新启动程序,它将永远不会做任何事情。您的系统调度程序有办法解决这个问题(系统每次打开时自动重新启动它,并立即检查所有计划的任务,以确保它没有错过任何任务),但您没有(除非您想让这个程序在每次系统打开时都运行,直到时间结束)。还存在各种较小的问题(请参阅J.F. Sebastian的一些注释),您的系统调度器已经知道如何解决这些问题,但它们要么需要更多的工作,要么无法处理。
在Python中比较两个对象时,类型很重要
date = datetimi.date(2015, 5, 24)
if datetime.date.now().date() == date:
fromeaddr = ""
date()
调用将datetime
对象限制为其date
部分
必须将输入日期变量(字符串)转换为datetime
类型
my_date = raw_input("Give me a date: ")
Give me a date: 24/05/2015
my_date_as_obj = datetime.datetime.strptime(my_date, "%d/%m/%Y")
if datetime.date.today() == my_date_as_obj.date():
# Date matches. Do something
也参考:日期时间Strftime