Je crée une application django qui doit pouvoir envoyer des e-mails et les envoyer à un moment donné. Je pensais que je pourrais utiliser django-mailer pour mettre les choses dans et puis l'envoyer. Mais même si leur liste de cas d'exemple, listes que c'est une caractéristique, je ne peux pas sembler savoir comment. Ce dont j'ai besoin, c'est de pouvoir définir un champ 'when_to_send' dans le modèle de message de django-mailer, et quand le job cron déclenche la fonction send_mail, il faut filtrer ceux qui ont une date 'when_to_send' qui est supérieure à l'heure actuelle ...Comment faire un envoi planifié d'e-mails avec django-mailer
def send_all():
"""
Send all eligible messages in the queue.
"""
lock = FileLock("send_mail")
logging.debug("acquiring lock...")
try:
lock.acquire(LOCK_WAIT_TIMEOUT)
except AlreadyLocked:
logging.debug("lock already in place. quitting.")
return
except LockTimeout:
logging.debug("waiting for the lock timed out. quitting.")
return
logging.debug("acquired.")
start_time = time.time()
dont_send = 0
deferred = 0
sent = 0
try:
for message in prioritize():
if DontSendEntry.objects.has_address(message.to_address):
logging.info("skipping email to %s as on don't send list " % message.to_address)
MessageLog.objects.log(message, 2) # @@@ avoid using literal result code
message.delete()
dont_send += 1
else:
try:
logging.info("sending message '%s' to %s" % (message.subject.encode("utf-8"), message.to_address.encode("utf-8")))
core_send_mail(message.subject, message.message_body, message.from_address, [message.to_address])
MessageLog.objects.log(message, 1) # @@@ avoid using literal result code
message.delete()
sent += 1
except (socket_error, smtplib.SMTPSenderRefused, smtplib.SMTPRecipientsRefused, smtplib.SMTPAuthenticationError), err:
message.defer()
logging.info("message deferred due to failure: %s" % err)
MessageLog.objects.log(message, 3, log_message=str(err)) # @@@ avoid using literal result code
deferred += 1
finally:
logging.debug("releasing lock...")
lock.release()
logging.debug("released.")
logging.info("")
logging.info("%s sent; %s deferred; %s don't send" % (sent, deferred, dont_send))
logging.info("done in %.2f seconds" % (time.time() - start_time))
Quelqu'un voit comment personnaliser cette fonction pour faire où le champ de message.when_to_send Envoyons pas de courrier électronique est supérieure à l'heure actuelle?
J'ai essayé ceci, mais ensuite le résultat est une boucle sans fin de la fonction priorityize(), et ce n'est bien sûr pas bon. – espenhogbakk