在Python中解析mailto url

时间:2012-01-30 16:59:59

标签: python mailto url-parsing

我正在尝试将mailto网址解析为包含subjectbody等的精美对象或字典。我似乎无法找到实现此目的的库或类 - 你是知道吗?

mailto:me@mail.com?subject=mysubject&body=mybody

7 个答案:

答案 0 :(得分:2)

核心urlparse lib在mailtos上的作用不是很好,但可以让你到达那里:

In [3]: from urlparse import urlparse

In [4]: urlparse("mailto:me@mail.com?subject=mysubject&body=mybody")
Out[4]: ParseResult(scheme='mailto', netloc='', path='me@mail.com?subject=mysubject&body=mybody', params='', query='', fragment='')

修改

一点研究发现this thread。底线:python url解析糟透了。

答案 1 :(得分:2)

您可以使用urlparse和parse_qs来解析使用mailto作为方案的网址。但请注意,根据scheme definition

mailto:me@mail.com,you@mail.com?subject=mysubject

相同
mailto:?to=me@mail.com&to=you@mail.com&subject=mysubject

以下是一个例子:

from urlparse import urlparse, parse_qs
from email.message import Message

url = 'mailto:me@mail.com?subject=mysubject&body=mybody&to=you@mail.com'
msg = Message()
parsed_url = urlparse(url)

header = parse_qs(parsed_url.query)
header['to'] = header.get('to', []) + parsed_url.path.split(',')

for k,v in header.iteritems():
    msg[k] = ', '.join(v)

print msg.as_string()

# Will print:
# body: mybody
# to: me@mail.com, you@mail.com
# subject: mysubject

答案 2 :(得分:1)

好像你可能只想编写自己的函数来执行此操作。

编辑: 这是一个示例函数(由python noob编写)。

编辑2,清理做反馈:

from urllib import unquote
test_mailto = 'mailto:me@mail.com?subject=mysubject&body=mybody'

def parse_mailto(mailto):
   result = dict()
   colon_split = mailto.split(':',1)
   quest_split = colon_split[1].split('?',1)
   result['email'] = quest_split[0]

   for pair in quest_split[1].split('&'):
      name = unquote(pair.split('=')[0])
      value = unquote(pair.split('=')[1])
      result[name] = value

   return result

print parse_mailto(test_mailto)

答案 3 :(得分:1)

以下是使用re模块的解决方案......

import re

d={}
def parse_mailto(a):
  m=re.search('mailto:.+?@.+\\..+?', a)
  email=m.group()[7:-1]
  m=re.search('@.+?\\..+?\\?subject=.+?&', a)
  subject=m.group()[19:-1]
  m=re.search('&.+?=.+', a)
  body=m.group()[6:]

  d['email']=email
  d['subject']=subject
  d['body']=body

这假设它与您发布的格式相同。您可能需要进行修改以更好地满足您的需求。

答案 4 :(得分:0)

包括电池:urlparse

答案 5 :(得分:0)

import urllib

query = 'mailto:me@mail.com?subject=mysubject&body=mybody'.partition('?')[2]
print dict((urllib.unquote(s).decode('utf-8') for s in pair.partition('=')[::2])
           for pair in query.split('&'))
# -> {u'body': u'mybody', u'subject': u'mysubject'}

答案 6 :(得分:0)

你应该使用像这样的特殊库

https://pypi.python.org/pypi/urlinfo

并贡献并创建问题以使Python更好;)

P.S。不使用Robbert Peters解决方案bcz它破解并且无法正常工作。同样使用正则表达式使用超级BFG枪来获得小鸟。