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.encode("utf-8")) 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))
def send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, connection=None, html_message=None): try: core_send_mail(subject=subject, message=message, from_email=from_email, recipient_list=recipient_list, fail_silently=fail_silently, auth_user=auth_user, auth_password=auth_password, connection=connection, html_message=html_message) except Exception as e: logging.warning(f'Error sending email: {str(e)}. subject={subject}, recipient_list={recipient_list}') raise e
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"))) if not message.message_body_html: core_send_mail(message.subject, message.message_body, message.from_address, [message.to_address]) else: email = EmailMultiAlternatives(message.subject, message.message_body, message.from_address, [message.to_address]) email.attach_alternative(message.message_body_html, 'text/html') email.send() 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))
def run(self): try: core_send_mail(subject=self.subject, message=self.message, from_email=self.from_email, recipient_list=self.recipient_list, fail_silently=self.fail_silently, html_message=self.html_message, **self.kwargs) except Exception as e: logger.exception(e)
def send_mail(subject, body, from_email, recipient_list, fail_silently=False, html_message=None, *args, **kwargs): return core_send_mail(subject, body, from_email, recipient_list, fail_silently, html_message, *args, **kwargs)
def send_mail(subject, body, from_email, recipient_list, fail_silently=False, html=None, *args, **kwargs): try: EmailThread(subject, body, from_email, recipient_list, fail_silently, html).start() print("异步发送") except: try: core_send_mail(subject, body, from_email, recipient_list, fail_silently, html) print("非异步发送") except: pass
def run(self): core_send_mail(self.subject, self.message, self.from_email, self.recipient_list, self.fail_silently)