|
@@ -6,7 +6,7 @@ import json
|
6
|
6
|
from typing import Union
|
7
|
7
|
from email.message import Message
|
8
|
8
|
from email.header import Header, decode_header, make_header
|
9
|
|
-from email.utils import formataddr,parsedate_tz,mktime_tz
|
|
9
|
+from email.utils import parseaddr,parsedate_tz,mktime_tz
|
10
|
10
|
from email import message_from_bytes
|
11
|
11
|
|
12
|
12
|
import requests
|
|
@@ -30,10 +30,11 @@ def decode_mail(msg:Message)-> dict:
|
30
|
30
|
try:
|
31
|
31
|
mailData['subject'] = str_header(msg['subject'])
|
32
|
32
|
mailData['msg_id'] = str_header(msg['Message-ID'])
|
33
|
|
- mailData['from'] = str_header(msg['From'])
|
|
33
|
+ mailData['from'] = parseaddr(msg['From'])[1]
|
34
|
34
|
# Reply key
|
35
|
|
- mailData['to'] = str_header(msg['To'])
|
36
|
|
- mailData['references'] = str_header(msg['References'])
|
|
35
|
+ mailData['to'] = parseaddr(msg['To'])[1]
|
|
36
|
+
|
|
37
|
+ mailData['references'] = parseaddr(msg['References'])[1]
|
37
|
38
|
if TRACIM_SPECIAL_KEY_HEADER in msg:
|
38
|
39
|
mailData[TRACIM_SPECIAL_KEY_HEADER] = str_header(msg[TRACIM_SPECIAL_KEY_HEADER])
|
39
|
40
|
# date
|
|
@@ -70,13 +71,10 @@ def get_tracim_content_key(mailData:dict) -> Union[str,None]:
|
70
|
71
|
if key is None and 'to' in mailData:
|
71
|
72
|
key = find_key_from_mail_adress(mailData['to'])
|
72
|
73
|
if key is None and 'references' in mailData:
|
73
|
|
- mail_adress = mailData['references'].split('>')[0].replace('<', '')
|
|
74
|
+ mail_adress = mailData['references']
|
74
|
75
|
key = find_key_from_mail_adress(mail_adress)
|
75
|
76
|
return key
|
76
|
77
|
|
77
|
|
-def get_email_address_from_header(header:str) -> str:
|
78
|
|
- return header.split('<')[1].split('>')[0]
|
79
|
|
-
|
80
|
78
|
def find_key_from_mail_adress(mail_address:str) -> Union[str,None]:
|
81
|
79
|
""" Parse mail_adress-like string
|
82
|
80
|
to retrieve key.
|
|
@@ -95,7 +93,7 @@ def find_key_from_mail_adress(mail_address:str) -> Union[str,None]:
|
95
|
93
|
|
96
|
94
|
class MailFetcher(object):
|
97
|
95
|
|
98
|
|
- def __init__(self,host,port,user,password,folder,delay,endpoint):
|
|
96
|
+ def __init__(self, host, port, user, password, folder, delay, endpoint):
|
99
|
97
|
self._connection = None
|
100
|
98
|
self._mails = []
|
101
|
99
|
self.host = host
|
|
@@ -175,7 +173,7 @@ class MailFetcher(object):
|
175
|
173
|
mail = self._mails.pop()
|
176
|
174
|
decoded_mail = decode_mail(mail)
|
177
|
175
|
msg = {"token" : VALID_TOKEN_VALUE,
|
178
|
|
- "user_mail" : get_email_address_from_header(decoded_mail['from']),
|
|
176
|
+ "user_mail" : decoded_mail['from'],
|
179
|
177
|
"content_id" : get_tracim_content_key(decoded_mail),
|
180
|
178
|
"payload": {
|
181
|
179
|
"content": decoded_mail['body']
|