2017-12-12 12 views
1

여기서는 imapblibemail을 사용하여 특정 기준 (즉, 보낸 사람과 보낸 사람)에 따라 특정 이메일 메시지를 검색합니다. 내 바탕 화면에 Gmail을 사용하여 이메일에 imaplib가 이메일의 URL 텍스트에 '='및 '3D'문자를 잘못 추가했습니다.

import imaplib 
import email 

FROM_EMAIL = "##########@gmail.com" 
FROM_PWD = "##########" 
SMTP_SERVER = "imap.gmail.com" 

mail = imaplib.IMAP4_SSL(SMTP_SERVER) 
mail.login(FROM_EMAIL,FROM_PWD) 
mail.select("INBOX") 
result, data2 = mail.search(None,'(FROM "####" SUBJECT "####")') 
ids = data2[0] 
id_list = ids.split() 
latest_email_id = id_list[-1] 
result, email_data = mail.fetch(latest_email_id, "(RFC822)") 

raw_email = email_data[0][1] 
raw_email_string = raw_email.decode('utf-8') 
email_message = email.message_from_string(raw_email_string) 

은 (# 문자는 중요한 정보를 나타냅니다 유의하시기 바랍니다)과 같이 나타납니다 링크가 :
# This is how the link is supposed to appear 
https://inreach.garmin.com/textmessage/txtmsg?extId=e3e7d4c2-fab4-43ad-93de-f9dedca8280#####=##########%40gmail.com 

가 전자 메일 텍스트 등을 인쇄 할 때

email_text = list(email_message.walk())[1].get_payload() 
print(email_text) # Note(I am not printing the whole email for privacy reasons) 

# The link as python has retrieved it appears like this: 

https://inreach.garmin.com/textmessage/txtmsg?extId=3De3e7d4c2-fab4-43ad-93=de-f9dedca8280#####=3D##########%40gmail.com 

파이썬은 어떻게 든 93 및사이의 = 문자를 추가 : 파이썬을 검색 한,이 나쁜 링크를 얻을 10이고 여러 개의 문자가 추가되었습니다 (3D).

파이썬은 무엇을하고 있습니까? 이 문제를 해결하는 방법에 대한 아이디어?

답변

2

당신이보고있는 것은 quoted-printable encoding입니다. 임의의 바이트를 ASCII 텍스트로 인코딩하여 전송하는 방법 중 하나입니다. 이메일. 이 인코딩의 결과 중에서 다음과 같습니다 :

메시지의 각 '=' 문자 '=3D'로 인코딩됩니다
  • (0x3d가 '='의 문자 코드이기 때문에).
  • 라인은 시퀀스 '=\n' (기본적으로 디코더가 제거 할 이스케이프 된 개행 문자)을 삽입하여 76 문자로 줄 바꿈됩니다. 이 줄 바꿈 중 하나가 링크 중간에 삽입되어있을 것입니다.

표준 라이브러리의 quopri module을 사용하여 인코딩 된 텍스트를 다시 원래 바이트로 변환 할 수 있습니다. Python의 email handling library 일부도이 작업을 수행 할 수 있습니다.