Как мне запланировать отправку электронной почты в определенное время, используя cron и smtp, в python? - PullRequest
0 голосов
/ 26 августа 2018

До сих пор я мог только отправлять электронные письма. Вот мой код:

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()

Я пытаюсь установить время для отправки электронного письма. Если кто-то также может помочь мне разобраться, как добавлять вложения, это было бы здорово!

1 Ответ

0 голосов
/ 26 августа 2018

Если у вас уже работает функция 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

Вы можетеположить поток и оставить поток обрабатывать отправку электронной почты.

...