星期三, 7月 15, 2009

POP3 in Python - 3 (Download Message)

再來使用POP3Object.retr(msgnum)來下載信件,一次只能抓一封,

抓完以後把他寫入暫時的mailbox中。


#!/usr/bin/env python
import getpass, poplib, sys, email
(host, user, dest) = sys.argv[1:]
passwd = getpass.getpass()

destfd = open(dest, "at")

p = poplib.POP3(host)
try:
p.user(user)
p.pass_(passwd)
except poplib.error_proto, e:
print "Login failed:", e
sys.exit(1)

for item in p.list()[1]:
number, octets = item.split(' ')
print "Downloading message %s (%s bytes)" % (number, octets)

lines = p.retr(number)[1]

msg = email.message_from_string("\n".join(lines))

destfd.write(msg.as_string(unixfrom = 1))

destfd.write("\n")

p.quit()
destfd.close()


retr()會回傳result code & message,值得注意的是message是用list方式給的,而非string,所以
要再行join一次。

程式的output:

cacaegg@cacabook:~/workspace/NetworkProgram/src/POP$ ./download.py mx.mgt.ncu.edu.tw cacaegg testmbox
Password:
Downloading message 1 (2466 bytes)


然後就把信件寫入testbox的檔案中囉!

另外在此並沒有把server上的信件刪掉,所以每次跑程式都會重新download一次!

沒有留言: