python获取邮件
1. 如何使用python对邮件进行实时收取
我用poplib写了个收取邮件的脚本,但是总提示“poplib.error_proto: -ERR 登录太频繁!”,不知道是不是刷新太频繁了,可是怎么做到实时收取呢?比如那些邮件客户端
你研究 推送服务器,长链接 等等关键词,搜索一下,我没有完整做过,只是知道有这么个概念,所以只能帮你到这里。
服务器不允许就不要那么频繁了
2. 如何用python抽取指定文本文件中所有的邮件地址
==========get_email.py========
#coding:utf-8
import re
'''
获取邮件地袭址主要就是依靠强大的正则表达式
'''
mailre = re.compile(r"(\w+@\w+\.\w+)")
f = open("a.txt",'r')
content = f.read()
print "\n".join(mailre.findall(content))
===========
======a.txt==========
我的邮件地址是[email protected]。
mail by: [email protected]
aklwjfoiewuoiu [email protected]
=============
%python get_email.py
[email protected]
[email protected]
[email protected]
3. 我用python通过imap收取邮件时为什么能收取
想用python做一个很简单的接收邮件的功能,只看python的官方doc(http://docs.python.org/2/library/imaplib.html)真的很不好懂,经过google之,探索之,稍微总结一下:
要使用imap接收邮件,当然要导入imaplib拉.
import imaplib
然后按常规的,建立链接→登录
conn = imaplib.IMAP4("imap.xxx.com",143)
conn.login("userName","password")
然后我想查看收件箱的邮件,咋办呢?要先选择一个目录,收件箱默认名称是"INBOX",IMAP是支持创建文件夹,查看其它文件夹的,如果是自己新建的文件夹,那么名称一般会是"INBOX.新建文件夹",不同的邮箱可能表示方式不一样,如果你不知道的话,那运行conn.list()查看所有的文件夹.
conn.select("INBOX")
选择后,然后查看文件夹,注意,IMAP的查看其实是一个搜索的过程,IMAP的原始命令是search all(大概的),在python里这么用:
type, data = conn.search(None, 'ALL')
然后返回的是这个收件箱里所有邮件的编号,按接收时间升序排列,最后的表示最近.
search这个很鬼麻烦,因为官方文档里没讲这个函数的第二个参数怎么用,于是找了下,可以填的命令有:
http://www.afterlogic.com/mailbee-net/docs/MailBee.ImapMail.Imap.Search_overload_1.html
于是如果我想找Essh邮件的话,使用
type, data = conn.search(None, '(SUBJECT "Essh")')
里面要用一个括号,代表是一个查询条件,可以同时指定多个查询条件,例如FROM xxxx SUBJECT "aaa",注意,命令要用括号罩住(痛苦的尝试)
search第一个参数是charset的意思,填None表示用默认ASCII,
data里获取到的是一个只有一个字符串元素的数组,包含很多数字,用空格隔开
['1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103'
于是想获取最后一封的做法是:
msgList = data[0].split()
last = msgList[len(msgList) - 1]
然后把那个邮件获取回来,用fetch函数
例子:
conn.fetch(last, '(RFC822.SIZE BODY[HEADER.FIELDS (SUBJECT)])')
但是返回的是一串MIME编码的东东,看不懂,如果能像eml那一操作一封邮件就好了.
方法是有的,用email库.
import email
然后以RFC822获取邮件格式,再用email.message_from_string转换为message对象.就可以当message操作了,(http://docs.python.org/2/library/email.message.html)
type,data=connect.fetch(msgList[len(msgList)-1],'(RFC822)')
msg=email.message_from_string(data[0][1])
content=msg.get_payload(decode=True)
最后content得到就是邮件的内容了
4. 如何用Python取出电子邮件@后面的部分
import re
email = input('请输入一个电子邮箱:')
print(re.sub('.+@', '', email))
5. python 邮件时间如何快速处理
可以使用datetime包的strptime函数
fromdatetimeimportdatetime
s='Wed,8Jul201515:18:12+0800(UTC)'
date=datetime.strptime(s[5:24],'%d%b%Y%H:%M:%S')
print('Month:',date.month)
print('Day:',date.day)
'%d %b %Y %H:%M:%S',是时间字符串,每一个%x对应一种类型的时间
会解析成datetime类型
6. Python编写一个程序 可以读取邮件日志(mbox.txt),统计每个邮件发出的邮件数量
inbox.txt的格式怎样的
7. 如何使用python电子邮件获取解码附件文件
import email.utils
msg = email.message_from_string(self.request.body)#http://docs.python.org/2/library/email.parser.html
部分在msg.walk()中:版
ctype = part.get_content_type()
如果权['image / jpeg','image / png']中的ctype为
image_file = part.get_payload(decode = True)
image_file_name = part。 get_filename()
8. python编写查看是否有新邮件的小工具
--------------------getNewMailNum----------------------
#-*-encoding:utf-8-*-
#author:rayment
#CreateDate:2012-06-24
importimaplib
importre
importInfoOutPut
defgmail_checker(mailhost,username,password,flag=0):
i=imaplib.IMAP4_SSL(mailhost)
try:
i.login(username,password)
x,y=i.status('INBOX','(MESSAGESUNSEEN)')
messages=int(re.search('MESSAGESs+(d+)',y[0]).group(1))
unseen=int(re.search('UNSEENs+(d+)',y[0]).group(1))
#print"-------------------------------------------------"
#print"%s:total%imessages,%iunseen."%(username,messages,
unseen)
outstr=[]
outstr.append(username)
outstr.append(':total')
outstr.append(str(messages))
outstr.append('messages,')
outstr.append(str(unseen))
outstr.append('unseen.')
InfoOutPut.InfoOutPut(''.join(outstr),flag)
finally:
i.logout()
if__name__=='__main__':
gmail_checker('imap.163.com','accout','xxxxxx',1)
gmail_checker('imap.126.com','accout','xxxxxx')
--------------------checkMail------------------------
#-*-encoding:utf-8-*-
#author:rayment
#CreateDate:2012-06-24
importimaplib
importemail
importInfoOutPut
importsys
reload(sys)
sys.setdefaultencoding('gbk')
defmy_unicode(s,encoding):
if
encoding:
returnunicode(s,encoding)
else:
returnunicode(s)
defcheckMail(mailhost,accout,password):
con=
imaplib.IMAP4_SSL(mailhost)
con.login(accout,password)
try:
con.select('INBOX',readonly=True)
flag,data=con.search(None,'ALL')
InfoOutPut.initOutPut()
InfoOutPut.InfoOutPut('Accout:'+accout)
fornumin(data[0]).split(''):
typ,msg_data=con.fetch(num,'(RFC822)')
InfoOutPut.InfoOutPut('No:'+num)
forresponse_partinmsg_data:
ifisinstance(response_part,tuple):
msg=email.message_from_string(response_part[1])
ls=msg["From"].split('')
strfrom=''
if(len(ls)==2):
fromname=email.Header.decode_header((ls[0]).strip('"'))
strfrom='From:'+my_unicode(fromname[0][0],fromname[0][1])+
ls[1]
InfoOutPut.InfoOutPut(strfrom,2)
else:
strfrom='From:'+msg["From"]
InfoOutPut.InfoOutPut(strfrom,2)
strdate='Date:'+msg["Date"]
InfoOutPut.InfoOutPut(strdate,2)
subject=email.Header.decode_header(msg["Subject"])
strsub='Subject:'+my_unicode(subject[0][0],
subject[0][1])
InfoOutPut.InfoOutPut(strsub)
finally:
try:
con.close()
except:
pass
con.logout()
if__name__=='__main__':
checkMail('imap.126.com','accout','xxxx')
#checkMail('imap.gmail.com','accout','xxxxx')
------------------------------------------------
9. 如何用爬虫爬取邮件附件python
我也遇到了这个问题,我的解决方法是,先将列表按照时间排序后再抓取,每次抓取完记录最后一条的url,下载再抓取时,遇到这个url,抓取就自动退出。如果解决了您的问题请点赞!如果未解决请继续追问!
10. Python 收发邮件 和 删除邮件 怎么做到
邮件传输的SMTP协议,并根据该协议,利用了Python的‘smtplib’和‘email‘模块,完成邮件的成功发送。
简单搭的报警邮件服务器没有UI,用FOXMAIL登录获取邮件头删除过慢,写个python脚本快速清空邮件
#!/usr/bin/python
import poplib
def main():
uugame=poplib.POP3('mail.url.com',110)
uugame.user('[email protected]')
uugame.pass_('dicc1234')
print uugame.stat()
mailmax=uugame.stat()[0]
for i in range(mailmax):
uugame.dele(i+1)
print uugame.stat()
uugame.quit()
if __name__=="__main__":
main()