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()
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()
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')
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)