Browse Source

Use standard lib to parse addr in email

Guénaël Muller 7 years ago
parent
commit
d4f675010e
2 changed files with 10 additions and 16 deletions
  1. 8 10
      tracim/tracim/lib/email_fetcher.py
  2. 2 6
      tracim/tracim/lib/test_email_fetcher.py

+ 8 - 10
tracim/tracim/lib/email_fetcher.py View File

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

+ 2 - 6
tracim/tracim/lib/test_email_fetcher.py View File

1
 from email_fetcher import decode_mail, get_tracim_content_key,\
1
 from email_fetcher import decode_mail, get_tracim_content_key,\
2
-    TRACIM_SPECIAL_KEY_HEADER,find_key_from_mail_adress,get_email_address_from_header
2
+    TRACIM_SPECIAL_KEY_HEADER,find_key_from_mail_adress
3
 from email.mime.multipart import MIMEMultipart
3
 from email.mime.multipart import MIMEMultipart
4
 from email.utils import parsedate_tz,mktime_tz
4
 from email.utils import parsedate_tz,mktime_tz
5
 import datetime
5
 import datetime
26
         'from': 'a@home',
26
         'from': 'a@home',
27
         'to': 'b@home',
27
         'to': 'b@home',
28
         'subject':'test',
28
         'subject':'test',
29
-        'references':'<reply+key@home>',
29
+        'references':'reply+key@home',
30
         'msg_id': '<uniquevalue@home>',
30
         'msg_id': '<uniquevalue@home>',
31
         'date': date
31
         'date': date
32
     }
32
     }
93
 def test_find_key_from_mail_adress_key():
93
 def test_find_key_from_mail_adress_key():
94
     mail_address="a+key@b"
94
     mail_address="a+key@b"
95
     assert find_key_from_mail_adress(mail_address) == 'key'
95
     assert find_key_from_mail_adress(mail_address) == 'key'
96
-
97
-def test_get_email_address_from_header():
98
-    mail_address = "blabla <a@b>"
99
-    assert  get_email_address_from_header(mail_address) == "a@b"