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

1

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

import smtplib

email_user = '[email protected]'
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()

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

  • 0
    Какая у тебя ОС?
  • 0
    Windows это моя ОС
Теги:
email
cron
smtplib
smtp

1 ответ

0
Лучший ответ

Предполагая, что у вас уже есть send_email() я бы сделал:

import datetime as dt
import time
import smtplib

def send_email():
    email_user = '[email protected]'
    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 = '[email protected]'
    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

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

  • 0
    Извините, я действительно новичок в этом. Можете ли вы объяснить, что означают значения в скобках в строке 4?
  • 0
    @ Вот формат dt.datetime (год, месяц, день, час, минута, секунда)
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню