Exemplo n.º 1
0
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))
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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))
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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
Exemplo n.º 7
0
 def run(self):
     core_send_mail(self.subject, self.message, self.from_email,
                    self.recipient_list, self.fail_silently)