def post(self): correo = self.request.get('correo') numero_folio = self.request.get('numero_folio') tipo_dte = self.request.get('tipo_dte') # Valicacion de datos if (correo, numero_folio, tipo_dte): # Proceso de creación del objeto email my_email = EmailModel() email_result = my_email.search_email( correo, numero_folio, tipo_dte) if not email_result == None: # Iniciando el proceso de envío de correo sg_email = EmailClient() sg_email.send_sg_email(email_result) else: logging.info('Correo no existe') else: logging.error("PARAMETROS INCORRECTOS")
def post(self): """ Metodo que recibe los eventos generados al intentar enviar correos a SendGrid Los eventos capturados son (procesado, enviado, abierto, descartado, rebotado) """ # se captura y se parsea a json el body del request recibido por el # webhook request_body = json.loads(self.request.body) for body in request_body: """ Evaluar el tipo de evento ya que trae campos diferentes """ logging.info(request_body) try: event = str(body['event']).decode("utf-8") correo = str(body['email']).decode("utf-8") numero_folio = str(body['numero_folio']).decode("utf-8") tipo_dte = str(body['tipo_dte']).decode("utf-8") logging.info(event) if event and correo and numero_folio and tipo_dte: if event == 'processed': # instanciar objeto EmailModel e = EmailModel() email_model = e.search_email(correo, numero_folio, tipo_dte) if not email_model == None: email_model.smtp_id = str(body['smtp-id']).decode('utf-8') email_model.processed_date = datetime.datetime.fromtimestamp(body['timestamp']) email_model.processed_event = event email_model.processed_sg_event_id = str(body['sg_event_id']).decode("utf-8") email_model.processed_sg_message_id = str(body['sg_message_id']).decode("utf-8") email_model.put() elif event == 'delivered': # instanciar objeto EmailModel e = EmailModel() email_model = e.search_email(correo, numero_folio, tipo_dte) if not email_model == None: email_model.smtp_id = str(body['smtp-id']).decode('utf-8') email_model.delivered_date = datetime.datetime.fromtimestamp(body['timestamp']) email_model.delivered_event = event email_model.delivered_sg_event_id = str(body['sg_event_id']).decode("utf-8") email_model.delivered_sg_message_id = str(body['sg_message_id']).decode("utf-8") email_model.delivered_response = str(body['response']).decode("utf-8") email_model.put() elif event == 'open': # instanciar objeto EmailModel e = EmailModel() email_model = e.search_email(correo, numero_folio, tipo_dte) if not email_model == None: if email_model.opened_first_date == None: email_model.opened_first_date = datetime.datetime.fromtimestamp(body['timestamp']) email_model.opened_last_date = datetime.datetime.fromtimestamp(body['timestamp']) email_model.opened_event = event email_model.opened_ip = str(body['ip']).decode("utf-8") email_model.opened_user_agent = str(body['useragent']).decode("utf-8") email_model.opened_sg_event_id = str(body['sg_event_id']).decode("utf-8") email_model.opened_sg_message_id = str(body['sg_message_id']).decode("utf-8") e.email_add_count(email_model) email_model.put() elif event == 'dropped': # instanciar objeto EmailModel e = EmailModel() email_model = e.search_email( correo, numero_folio, tipo_dte) if not email_model == None: email_model.smtp_id = str(body['smtp-id']).decode('utf-8') email_model.dropped_date = datetime.datetime.fromtimestamp( body['timestamp']) email_model.dropped_sg_event_id = str(body['sg_event_id']).decode("utf-8") email_model.dropped_sg_message_id = str(body['sg_message_id']).decode("utf-8") email_model.dropped_reason = str(body['reason']).decode("utf-8") email_model.dropped_event = event email_model.put() elif event == 'bounce': # instanciar objeto EmailModel e = EmailModel() email_model = e.search_email(correo, numero_folio, tipo_dte) if not email_model == None: email_model.smtp_id = str(body['smtp-id']).decode('utf-8') email_model.bounce_date = datetime.datetime.fromtimestamp(body['timestamp']) email_model.bounce_event = event email_model.bounce_sg_event_id = str(body['sg_event_id']).decode("utf-8") email_model.bounce_sg_message_id = str(body['sg_message_id']).decode("utf-8") email_model.bounce_reason = str(body['reason']).decode("utf-8") email_model.bounce_status = str(body['status']).decode("utf-8") email_model.bounce_type = str(body['type']).decode("utf-8") email_model.put() elif event == 'unsubscribe': e = EmailModel() email_model = e.search_email(correo, numero_folio, tipo_dte) if not email_model == None: email_model.unsubscribe_date = datetime.datetime.fromtimestamp(body['timestamp']) email_model.unsubscribe_uid = str(body['uid']).decode("utf-8") email_model.unsubscribe_purchase = str(body['purchase']).decode("utf-8") email_model.unsubscribe_id = str(body['id']).decode("utf-8") email_model.unsubscribe_event = str(body['event']).decode("utf-8") email_model.put() elif event == 'click': e = EmailModel() email_model = e.search_email(correo, numero_folio, tipo_dte) if not email_model == None: email_model.click_ip = str(body['ip']).decode("utf-8") email_model.click_purchase = str(body['purchase']).decode("utf-8") email_model.click_useragent = str(body['useragent']).decode("utf-8") email_model.click_event = str(body['event']).decode("utf-8") email_model.click_email = str(body['email']).decode("utf-8") email_model.click_date = body['timestamp'] email_model.click_url = str(body['url']).decode("utf-8") email_model.put() else: logging.info('body con campos vacios') except Exception, e: logging.error(e)
def post(self): # registro de header y body del request #logging.info(self.request.headers) #logging.info(self.request.body) # seteo de parametros recibidos empresa = self.request.get('empresa') rut_receptor = self.request.get('rut_receptor') rut_emisor = self.request.get('rut_emisor') tipo_envio = self.request.get('tipo_envio') tipo_dte = self.request.get('tipo_dte') numero_folio = self.request.get('numero_folio') resolucion_receptor = self.request.get('resolucion_receptor') resolucion_emisor = self.request.get('resolucion_emisor') monto = self.request.get('monto') fecha_emision = self.request.get('fecha_emision') fecha_recepcion = self.request.get('fecha_recepcion') estado_documento = self.request.get('estado_documento') tipo_operacion = self.request.get('tipo_operacion') tipo_receptor = self.request.get('tipo_receptor') nombre_cliente = self.request.get('nombre_cliente') correo = self.request.get('correo') asunto = self.request.get('asunto') html = self.request.get('html') # seteo de adjuntos si es que lo hubiera adjunto1 = self.request.POST.get('adjunto1', None) adjunto2 = self.request.POST.get('adjunto2', None) adjunto3 = self.request.POST.get('adjunto3', None) if (correo and asunto and html and numero_folio and tipo_dte): # Proceso de creación del objeto email my_email = EmailModel() email_result = my_email.search_email(correo, numero_folio, tipo_dte) if email_result == None: #try: my_email.nombre_cliente = nombre_cliente my_email.correo = correo my_email.asunto = asunto my_email.html = html my_email.tipo_dte = tipo_dte my_email.numero_folio = numero_folio if empresa: my_email.empresa = empresa if rut_receptor: my_email.rut_receptor = rut_receptor if rut_emisor: my_email.rut_emisor = rut_emisor if tipo_envio: my_email.tipo_envio = tipo_envio if resolucion_receptor: my_email.resolucion_receptor = resolucion_receptor if resolucion_emisor: my_email.resolucion_emisor = resolucion_emisor if monto: try: my_email.monto = int(monto, base=10) except: pass if fecha_emision and not None: my_email.fecha_emision = datetime.datetime.fromtimestamp(float(fecha_emision)) if fecha_recepcion and not None: my_email.fecha_recepcion = datetime.datetime.fromtimestamp(float(fecha_recepcion)) if estado_documento: my_email.estado_documento = estado_documento if tipo_operacion: my_email.tipo_operacion = tipo_operacion if tipo_receptor: my_email.tipo_receptor = tipo_receptor # Evaluar adjuntos if not adjunto1 == None: att = AttachModel( nombre=adjunto1.filename, archivo=adjunto1.file.read()).put() my_email.attachs.append(att) if not adjunto2 == None: att = AttachModel( nombre=adjunto2.filename, archivo=adjunto2.file.read()).put() my_email.attachs.append(att) if not adjunto3 == None: att = AttachModel( nombre=adjunto3.filename, archivo=adjunto3.file.read()).put() my_email.attachs.append(att) my_email.put() context = { 'correo': correo, 'numero_folio': numero_folio, 'tipo_dte': tipo_dte, } # Inicio taskqueue q = taskqueue.Queue('InputQueue') t = taskqueue.Task(url='/inputqueue', params=context) q.add(t) self.response.write({'message': 'success'}) #except Exception, e: # logging.error(e) else: logging.info('objeto ya existe') # fin todo else: self.response.write({'message': 'error fields'})