2017-12-22 19 views
1

내 앱은 수신 이메일을 수신하고 발신자의 이메일 주소를 데이터 저장소에 저장합니다. 때문에 내 응용 프로그램 방식App Engine Datastore 잘못된 형식의 이메일 저장

John Smith <[email protected]>

하고 쿼리가 난 단지이 형식으로 주소를 검색 할 수 있습니다 설정되어 있습니다입니다 : 내가 사용하려고 노력 [email protected]

문제는이 형식으로 저장입니다 메시지를 서식을 정규식하지만 어떤 이유로 작동하지 않습니다, 내가 시도하는 모든 식에 대한 범위 오류 범위 밖의 목록 인덱스를 가져옵니다. 도움이된다면 여기 내 메일 처리기 용 코드가 있습니다.

App Engine에서 로그를 확인하고 필요한 형식으로 들어오는 메시지가 왔지만 데이터 저장소 엔티티를 확인하고 이름도 함께 추가합니다.

이메일 주소를 추가 비트없이 저장하는 방법을 알아야합니다.

import webapp2 
import logging 
from google.appengine.ext.webapp import mail_handlers 
from google.appengine.api import mail 
import os 
from main import WorkRequest 
import re 


class IncomingMailHandler(mail_handlers.InboundMailHandler): 
    def receive(self, message): 
     (encoding, payload) = list(message.bodies(content_type='text/plain'))[0] 
     body_text = payload.decode() 
     logging.info('Received email message from %s, subject "%s": %s' % 
        (message.sender, message.subject, body_text)) 

     logging.info (message.sender) 
     logging.info(message.subject) 
     logging.info(body_text) 


     sender = str(message.sender) 
     logging.info(sender) 

     email_address = re.findall('<([^>])>', sender)[0] 

     wr = WorkRequest() 

     wr.email = email_address 
     wr.userId = None 
     wr.title = message.subject 
     wr.content = body_text 
     wr.status = "OPEN" 
     wr.submission_type = "EMAIL" 
     wr.assigned_to = "UNASSIGNED" 
     wr.put() 

application = webapp2.WSGIApplication([('/_ah/mail/.+', IncomingMailHandler)],debug=True) 

답변

0

코드 조각이 게시 될 때 문제가 발생하지 않는 한 해당 정규 표현식은 매우 일치하지 않을 수 있습니다. 시도해보십시오.

email_address = re.findall('<(.*?)>', sender)[0] 

이렇게하면 특정 주소 형식을 처리 할 수 ​​있습니다. 대신 정규식의 대안으로

0

:

email = email.split('<')[1].split('>')[0] 
0

는 표준 라이브러리의 email 패키지에서 parseaddr 기능을 사용합니다. docs 가입일

>>> from email.utils import parseaddr 
>>> sender = 'John Smith <[email protected]>' 
>>> name, address = parseaddr(sender) 
>>> print name 
John Smith 
>>> print address 
[email protected] 

:

파싱 어드레스 - 그러한 또는 참조 어드레스 일부 함유 필드의 값이어야 - 그 구성 realname 이메일 주소 부로. 파싱 ​​ 이 실패하지 않는 한 해당 정보의 튜플을 반환합니다.이 경우 2 개의 튜플 ('', '')이 반환됩니다.