【发布时间】:2017-01-07 22:00:35
【问题描述】:
谁能帮助这个解析器
import getpass, imaplib, email
def split_addrs(s):
if not(s): return []
outQ = True
cut = -1
res = []
for i in range(len(s)):
if s[i]=='"': outQ = not(outQ)
if outQ and s[i]==',':
res.append(email.utils.parseaddr(s[cut+1:i]))
cut=i
res.append(email.utils.parseaddr(s[cut+1:i+1]))
return res
def get_addresses( name, password):
mail=imaplib.IMAP4_SSL('imap.gmail.com')
mail.login( name , password )
print "In email account, accessing \"%s\" All mail...\n"
mail.select('"[Gmail]/All Mail"')
result,data=mail.search(None,"ALL")
ids=data[0].split()[-10:]
print "Processing %d emails...\n" % ( len(ids) )
msgs = mail.fetch(','.join(ids),'(BODY.PEEK[HEADER])')[1][0::2]
addr=[]
print msgs
for x,msg in msgs:
msgobj = email.message_from_string(msg)
addr.extend(split_addrs(msgobj['to']))
addr.extend(split_addrs(msgobj['from']))
addr.extend(split_addrs(msgobj['cc']))
mail.close()
mail.logout()
addr_set = set(addr)
print "Fetched and writing %d unique name and emails to scraped_email.txt...\n" % ( len(addr_set) )
f = open('scraped_emails.txt', 'w')
for each in addr_set:
name, address = each
print "%s, %s" % (name, address)
f.write("%s, %s\n" % (name, address))
f.close()
print "Done"
if __name__ == '__main__':
email_address = raw_input('Enter your email: ')
print "Username: %s" % ( email_address )
get_addresses( email_address, getpass.getpass())
这是我的输出
In email account, accessing "%s" All mail...
正在处理 10 封电子邮件...
Traceback (most recent call last):
File "/home/richard/environments/google-tools/gmail-addresses/program.py", line 52, in <module>
get_addresses( email_address, getpass.getpass())
File "/home/richard/environments/google-tools/gmail-addresses/program.py", line 30, in get_addresses
msgobj = email.message_from_string(msg)
AttributeError: 'module' object has no attribute 'message_from_string'
我计划稍后让该文件夹可选择,但现在想尝试让它在所有邮件上工作。
谁能发现我的错误
我正在使用带有 eclipse pydev ide 的 python 2.7
谢谢
【问题讨论】: