示例#1
0
def process_special_task_detail(obj):
    log = logging.getLogger('task')
    process_obj = EmailTaskDetail.objects.filter(email_task_id=obj.id,
                                                 status=0,
                                                 process_time__lt=int(time.time())).order_by('process_time').first()
    process_objs = EmailTaskDetail.objects.filter(email_task_id=obj.id, status=0).all()
    if process_obj is None and len(process_objs) == 0:
        log.info('任务执行完毕,%s' % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
        obj.status = 2
        obj.save()
    else:
        if process_obj is None:
            return
        log.info('开始时间,%s' % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
        account = EmailAccount.objects.filter(id=process_obj.email_account_id).first()
        process_obj.status = 1
        process_obj.save()
        mail_handler = SendEmail()
        mail_handler.set_info(account.smtp, account.address, account.password)
        log.info('发件人%s,收件人%s,' % (account.address, process_obj.send_to))
        try:
            mail_handler.send_email(account.address, process_obj.send_to, None, process_obj.subject,
                                    process_obj.content, eval(process_obj.atts) if process_obj.atts != '' else [])
            process_obj.result = 0
            process_obj.process_time = int(time.time())
            process_obj.save()
            log.info('执行成功,%s' % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
        except Exception as e:
            process_obj.result = 1
            process_obj.info = str(e)
            process_obj.process_time = int(time.time())
            process_obj.save()
            log.info('执行失败,%s,信息:%s' % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())),
                                        str(e)))
        mail_handler.logout()
示例#2
0
def process_task_detail(obj):
    log = logging.getLogger('task')

    interval_second = obj.interval * 60

    process_obj = EmailTaskDetail.objects.filter(email_task_id=obj.id,
                                                 status=0,
                                                 update_time__lt=int(
                                                     time.time())).first()
    process_objs = EmailTaskDetail.objects.filter(email_task_id=obj.id,
                                                  status=0).all()
    if process_obj == None and len(process_objs) == 0:
        log.info(
            '任务执行完毕,%s' %
            time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
        obj.status = 2
        obj.save()
    else:
        if process_obj == None: return
        log.info(
            '开始时间,%s' %
            time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
        account = EmailAccount.objects.filter(
            id=process_obj.email_account_id).first()
        process_obj.status = 1
        process_obj.save()
        EmailTaskDetail.objects.filter(
            email_task_id=obj.id,
            status=0).update(update_time=int(time.time()) + interval_second)
        mail_handler = SendEmail()
        mail_handler.set_info(account.smtp, account.address, account.password)
        log.info('发件人%s,收件人%s,' % (account.address, process_obj.send_to))
        try:
            mail_handler.send_email(
                account.address, process_obj.send_to, None,
                process_obj.subject, process_obj.content,
                eval(process_obj.atts) if process_obj.atts != '' else [])
            process_obj.result = 0
            #process_obj.status = 1
            process_obj.process_time = int(time.time())
            process_obj.save()
            log.info('执行成功,%s' % time.strftime("%Y-%m-%d %H:%M:%S",
                                               time.localtime(time.time())))
        except Exception as e:
            process_obj.result = 1
            #process_obj.status = 1
            process_obj.info = str(e)
            process_obj.process_time = int(time.time())
            process_obj.save()
            log.info('执行失败,%s,信息:%s' % (time.strftime(
                "%Y-%m-%d %H:%M:%S", time.localtime(time.time())), str(e)))
        mail_handler.logout()
示例#3
0
def reply_email(request):
    
    data = request.POST.dict()
    send_from = data['send_from']
    send_to = data['send_to']
    send_cc = data['send_cc']
    subject = data['subject']
    content = data['content']
    
    account = EmailAccount.objects.filter(address__contains = send_from).first()
    content = content.replace('<div data="signature">签名位上下1格勿删,自动替换</div>',account.signature)
    
    customer_id = 0
    cs_obj = Customer.objects.filter(email__contains = send_to).first()
    if cs_obj !=None:
        customer_id=cs_obj.id
    
    now_time = int(time.time())
    uid = '%s' % (datetime.datetime.now().strftime('%Y%m%d%H%M%S%f')[:-4])
    Email.objects.create(status=2,read=1,uid=uid,sent_from = send_from,send_to = send_to,send_cc = send_cc,
         subject = subject,server_id = 'local',date = time.strftime('%Y-%m-%d %X', time.localtime(time.time())),
         content = content,customer_id = customer_id,create_time = now_time)
    
    if settings.DEBUG:
        path = settings.STATIC_ROOT +'/static/attachment/'
    else:
        path = settings.STATIC_ROOT +'/attachment/'
    
    file_obj = request.FILES.getlist('files')
    try:
        os.mkdir(path+str(uid))
    except Exception:
        pass
    attachment = []
    for item in file_obj:
        attachment.append({'path':path +str(uid)+'/'+ item.name,'name':item.name})
        Attachment.objects.create(create_time = int(time.time()),size = 0,email_id = str(uid),file_name = item.name,path='/static/attachment/'+str(uid)+'/'+ item.name)
        with open(path +str(uid)+'/'+ item.name,'wb') as up:
            for chunk in item.chunks():
                up.write(chunk)
        up.close()
    
    
    obj = SendEmail()
    obj.set_info(account.smtp,account.address,account.password)
    obj.send_email(account.address,send_to, None, subject,content,attachment)
    obj.logout()
    
    Email.objects.filter(id = data['email_id']).update(reply = 1)
     
    return HttpResponse('done')
示例#4
0
def celery_send_email(email_id):
    email = Email.objects.filter(id=email_id).first()
    account = EmailAccount.objects.filter(address__contains=email.sent_from).first()
    to_addr = email.send_to
    log = logging.getLogger('task')
    try:
        cc = ','.join([item['cc_email'] for item in eval(email.send_cc)])
        subject = email.subject
        content = email.content
        if email.reply_id != 0:
            # content = email.content.replace('签名位上下1格勿删,自动替换', account.signature)
            email.reply = 1
            Email.objects.filter(id=email.reply_id).update(reply=1)
        # else:
            # content = email.content + '<br /><br /><br />' + account.signature
        attachment = []
        atts = Attachment.objects.filter(email_id=email.uid).all()
        for att in atts:
            attachment.append({'path': '%s%s' % (settings.STATIC_ROOT, att.path.replace('/static/', '/')), 'name': att.file_name})
        log.info('to_addr:%s,cc:%s,subject:%s,attachment:%s' % (to_addr, cc, subject, attachment))
        mail_handler = SendEmail()
        mail_handler.set_info(account.smtp, account.address, account.password)
        mail_handler.send_email(account.address, to_addr.replace(';', ','), cc, subject, content, attachment)
        mail_handler.logout()
        log.info('send_finish')
        info = SendTask.objects.filter(uid=email.uid).first()
        info.status = 1
        info.info = 'Done'
        info.process_time = int(time.time())
        info.save()
        email.status = 2
        email.read = 1
        email.content = content
        email.content_html = content
        email.content_normalized = content
        email.save()
    except Exception as e:
        import traceback
        log.info('got_exception')
        info = SendTask.objects.filter(uid=email.uid).first()
        info.process_time = int(time.time())
        info.info = '%s' % traceback.format_exc()
        info.save()
        log.info('发送邮件发生异常重新发送邮件,邮件ID为----------%s-------------%s' % (email_id, traceback.format_exc()))
        if '%s' % e == '[Errno -2] Name or service not known':
            celery_send_email(email_id)