Esempio n. 1
0
def generate_message(sender, schedule_id, group_id, mailbox_id):
    ''' Generate (or update) message for specifed group and mailbox
    '''
    log = current_task.get_logger()
    current_time = now()
    try:
        schedule = Schedule.objects.get(id=schedule_id)
        group = Group.objects.get(id=group_id)
        mailbox = Mailbox.objects.get(id=mailbox_id)

        context = schedule.get_context(group, mailbox.user)
        msg = None
        try:
            msg = Message.objects.get(schedule=schedule, mailbox=mailbox)
        except Exception, e:
            msg = Message(schedule=schedule, mailbox=mailbox)

        msg.text = Template(schedule.text).render(Context(context))
        msg.save()

        if current_time >= schedule.dt_start:  #:TODO : 1 minutes
            #: sendmail right now
            send_message(message_obj=msg)
        else:
            #: sendmail later
            send_message.apply_async([msg.id], eta=msg.dt_start)
Esempio n. 2
0
def send_message(message_id=None, message_obj=None):
    ''' send actual message
        
    .. todo::
        - Message status is required
    '''
    log = current_task.get_logger()
    try:
        msg = message_obj if message_obj != None else Messsage.objects.get(
            id=message_id)
        #:TODO: check message status. If already "SENDING" or "CANCELD", don't send
        #       check schedue status. If already "CANCELD", don't send
        send_mail(
            msg.schedule.subject,  #:TODO: Message should have rendered subject
            msg.text,
            "info@" + msg.schedule.owner.
            domain,  #:TODO: Owner "symbol" to be defined and compose from address
            [msg.mailbox.address],
            return_path=msg.get_return_path(),
            message_id=msg.mail_message_id,
        )
        #:TODO: change the status

    except Message.DoesNotExist, e:
        log.error("send_message():No Message record for id=%s" % message_id)
Esempio n. 3
0
def generate_message(sender,schedule_id,group_id, mailbox_id ): 
    ''' Generate (or update) message for specifed group and mailbox
    '''
    log = current_task.get_logger()
    current_time = now()
    try:
        schedule = Schedule.objects.get(id=schedule_id )
        group = Group.objects.get(id=group_id)
        mailbox= Mailbox.objects.get(id=mailbox_id)

        context = schedule.get_context(group,mailbox.user)        
        msg=None
        try:
            msg = Message.objects.get(schedule=schedule,mailbox=mailbox )
        except Exception,e:
            msg = Message(schedule=schedule,mailbox=mailbox )

        msg.text = Template(schedule.text).render(Context(context))
        msg.save()

        if current_time >= schedule.dt_start: #:TODO : 1 minutes 
            #: sendmail right now
            send_message(message_obj=msg) 
        else :
            #: sendmail later
            send_message.apply_async([msg.id],eta=msg.dt_start )
Esempio n. 4
0
def smtp_status(sender, msg, **extended):
    log = current_task.get_logger()
    log.debug(
        'tasks.smtp_status:{0}:{1}:{2}'.format(
            sender, msg, str(extended)))

    # model_class = get_model(
    #       *(extended.get('model_class','')+'.').split('.')[:2])
    model_class = get_model(extended.get('model_class', ''))
    model_class and getattr(
        model_class, 'update_status', lambda *x, **y: None)(msg, **extended)
Esempio n. 5
0
def generate_messages_for_schedule(sender, schedule_id):
    ''' Generate messages for speicifed Schedule
    '''
    log = current_task.get_logger()
    try:
        schedule = Schedule.objects.get(id=schedule_id)
        for g in schedule.groups.all():
            for m in g.mailbox_set.exclude(user=None):
                #: TODO: Exclude  user == None or is_active ==False or forward == None
                generate_message.delay(sender, schedule.id, g.id, m.id)
    except Exception, e:
        log.error("generate_messages_for_schedule():" + str(e))
Esempio n. 6
0
def generate_messages_for_schedule(sender,schedule_id):
    ''' Generate messages for speicifed Schedule
    '''
    log = current_task.get_logger()
    try:   
        schedule = Schedule.objects.get(id = schedule_id ) 
        for g in schedule.groups.all():
            for m in g.mailbox_set.exclude(user=None):
                #: TODO: Exclude  user == None or is_active ==False or forward == None
                generate_message.delay(sender,schedule.id,g.id,m.id )
    except Exception,e:
        log.error( "generate_messages_for_schedule():" +  str(e) )
Esempio n. 7
0
def enqueue_schedule(sender,id=None):
    ''' enqueue specifid mail schedule , or all schedules
    '''
    log = current_task.get_logger()

    args={'id':id} if id else {}
    log.debug("specified Schedule id = %s" % str(args))

    for s in Schedule.objects.filter(**args):
        if s.status== "scheduled":
            generate_messages_for_schedule.delay(sender,s.id ) #: Asynchronized Call
            s.status = "active"
            s.save()
Esempio n. 8
0
def enqueue_schedule(sender, id=None):
    ''' enqueue specifid mail schedule , or all schedules
    '''
    log = current_task.get_logger()

    args = {'id': id} if id else {}
    log.debug("specified Schedule id = %s" % str(args))

    for s in Schedule.objects.filter(**args):
        if s.status == "scheduled":
            generate_messages_for_schedule.delay(sender,
                                                 s.id)  #: Asynchronized Call
            s.status = "active"
            s.save()
Esempio n. 9
0
def send_email(message, **kwargs):
    ''' message : django EmailMessage
    '''
    logger = current_task.get_logger()
    try:
        conn = get_connection(backend=BACKEND)
        result = conn.send_messages([message])
        logger.debug("tasks.send_email:Successfully sent email message to %r.",
                     message.to)
        return result
    except Exception, e:
        # catching all exceptions b/c it could be any number of things
        # depending on the backend
        # send_email.retry(exc=e)
        logger.debug(str(e) + traceback.format_exc().replace('\n', '/'))
        logger.warning(
            "tasks.send_email:Failed to send email message to %r, retrying.",
            message.to)
Esempio n. 10
0
def send_message(message_id=None,message_obj=None):
    ''' send actual message
        
    .. todo::
        - Message status is required
    '''
    log = current_task.get_logger()
    try:
        msg = message_obj if message_obj != None else Messsage.objects.get(id=message_id) 
        #:TODO: check message status. If already "SENDING" or "CANCELD", don't send
        #       check schedue status. If already "CANCELD", don't send
        send_mail(msg.schedule.subject,     #:TODO: Message should have rendered subject
                  msg.text,
                  "info@"+msg.schedule.owner.domain, #:TODO: Owner "symbol" to be defined and compose from address
                  [msg.mailbox.address],
                  return_path = msg.get_return_path(),
                  message_id = msg.mail_message_id,
            )
        #:TODO: change the status
                  
    except Message.DoesNotExist ,e:
        log.error("send_message():No Message record for id=%s" % message_id)
Esempio n. 11
0
def send_email_in_string(return_path, recipients, message_string, **extended):
    '''  message_stiring :
            string expression of Python email.message.Message object
    '''
    logger = current_task.get_logger()
    try:
        conn = get_connection(backend=BACKEND)
        conn.open()
        result = conn.send_message_string(
            return_path, recipients, message_string, **extended)

        logger.debug(
            "send_email_in_string:Successfully sent email message to %r.",
            recipients)
        return result

    except:
        # catching all exceptions b/c it could be any number of things
        # depending on the backend
        logger.debug(traceback.format_exc())
        logger.warning(
            "{0}:Failed to send email message to {1}, retrying.".format(
                'send_email_instring', recipients))
Esempio n. 12
0
def enqueue_publish(sender, publish_id=None, publish=None,
                    member_filter={}, member_exclude={}):
    ''' enqueue specifid mail publish, or all publish

        - id : Publish identfier
    '''
    log = current_task.get_logger()

    q = [publish]
    if publish is None:
        args = {'status': "scheduled", }
        if publish_id:
            args['id'] = publish_id
        log.debug("specified Publish is = %s" % str(args))
        q = Publish.objects.filter(**args)

    for publish in q:
        t = enqueue_mails_for_publish.delay(
            sender, publish.id,
            member_filter, member_exclude)  # Asynchronized Call
        publish.status = "active"
        publish.activated_at = now()
        publish.task_id = t.task_id
        publish.save()
Esempio n. 13
0
@task
def enqueue_mails_for_publish(
    sender, publish_id,
    member_filter={}, member_exclude={},
    signature="pub", async=True
):
    ''' Enqueu mails for speicifed Publish

        :param member_query: dict for query

    .. todo::
        - Custum QuerSet fiilter to targetting user.
        - If called asynchronosly, enqueue_mail should be called synchronosly.
    '''
    log = current_task.get_logger()
    # Never use: member_exclude.update({'user': None, })
    member_filter.update({'is_active': True})   # only for Active Address
    default_ban = Q(address__endswith='@localhost') | Q(user__isnull=True)

    try:
        publish = Publish.objects.get(id=publish_id)
        for circle in publish.circles.all():
            for member in circle.member_set.filter(
                    **member_filter).exclude(default_ban):
                time.sleep(20.0 / 1000.0)
                pub = Publication.objects.publish(
                    publish, circle, member, signature)

                assert pub.message is not None
                t = enqueue_mail.apply_async(