Skip to main content
 首页 » 编程设计

python之如何在 python 中使用 cron 和 smtp 安排在特定时间发送电子邮件

2024年08月15日44oomusou

到目前为止,我只能发送电子邮件。这是我的代码:

import smtplib 
 
email_user = 'myemail@gmail.com' 
server = smtplib.SMTP ('smtp.gmail.com', 587) 
server.starttls() 
server.login(email_user, 'email pass') 
 
#SET TIME HERE? 
from crontab import CronTab 
 
#EMAIL 
message = 'sending this from python!' 
server.sendmail(email_user, email_user, message) 
server.quit() 

我正在努力设定发送电子邮件的时间。如果有人也能帮我弄清楚如何添加附件,那就太好了!

请您参考如下方法:

假设您的 send_email() 函数已经正常工作,我会这样做:

import datetime as dt 
import time 
import smtplib 
 
def send_email(): 
    email_user = 'myemail@gmail.com' 
    server = smtplib.SMTP ('smtp.gmail.com', 587) 
    server.starttls() 
    server.login(email_user, 'email pass') 
 
    #EMAIL 
    message = 'sending this from python!' 
    server.sendmail(email_user, email_user, message) 
    server.quit() 
 
send_time = dt.datetime(2018,8,26,3,0,0) # set your sending time in UTC 
time.sleep(send_time.timestamp() - time.time()) 
send_email() 
print('email sent') 

如果你想定期发送邮件,你可以这样做:

import datetime as dt 
import time 
import smtplib 
 
def send_email(): 
    email_user = 'myemail@gmail.com' 
    server = smtplib.SMTP ('smtp.gmail.com', 587) 
    server.starttls() 
    server.login(email_user, 'email pass') 
 
    #EMAIL 
    message = 'sending this from python!' 
    server.sendmail(email_user, email_user, message) 
    server.quit() 
 
def send_email_at(send_time): 
    time.sleep(send_time.timestamp() - time.time()) 
    send_email() 
    print('email sent') 
 
first_email_time = dt.datetime(2018,8,26,3,0,0) # set your sending time in UTC 
interval = dt.timedelta(minutes=2*60) # set the interval for sending the email 
 
send_time = first_email_time 
while True: 
    send_email_at(send_time) 
    send_time = send_time + interval 

您还可以生成一个线程并让该线程处理电子邮件的发送。