I'm just a python beginner ...
Want to use Python to do a very simple function of receiving mail, only to see the official Python doc (http://docs.python.org/2/library/imaplib.html) really very difficult to understand, after Google, explore, To sum up a little:
To receive mail using IMAP, of course, import imaplib.
Import Imaplib
Then follow the normal, set up link → Login
conn = Imaplib. IMAP4 ("imap.xxx.com", 143)
Conn.login ("UserName", "password")
Then I want to check the Inbox mail, how to do? To select a directory first, the Inbox default name is "INBOX", IMAP is to support the creation of folders, see other folders, if it is a new folder of their own, then the name will generally be "INBOX. New Folder", Different mailboxes may not represent the same way, if you don't know, then run conn.list () to view all the folders.
Conn.select ("INBOX")
After selecting, and then looking at the folder, note that the IMAP view is actually a search process, the original IMAP command is searched all (approximate), in Python:
Type, data = Conn.search (None, ' all ')
It then returns the number of all the messages in the Inbox, sorted in ascending order of receiving time, and finally the last one.
Search this is a lot of trouble, because the official document does not say the function of the second parameter how to use, so look for the following, you can fill in the command:
Http://www.afterlogic.com/mailbee-net/docs/MailBee.ImapMail.Imap.Search_overload_1.html
So if I want to find essh mail, use
Type, data = Conn.search (None, ' (SUBJECT "Essh")
Inside to use a bracket, represented is a query condition, you can specify multiple query criteria, such as from XXXX SUBJECT "AAA", note that the command to be covered with parentheses (painful attempt)
Search the first parameter is the meaning of the charset, and the none means the default ASCII,
Data gets an array of only one string element, containing many numbers, separated by a space
[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 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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 '
So the last thing you want to get is:
Msglist = Data[0].split () Last
= Msglist[len (msglist)-1]
And then get that message back and use the FETCH function
Example:
Conn.fetch (Last, ' RFC822. SIZE Body[header. FIELDS (SUBJECT)])
But the return is a string of MIME-encoded Dongdong, do not understand, if it can be like eml that an operation of an e-mail.
The method is some, use the email library.
Import Email
Then you get the message format in RFC822, and then you convert it to a messages object with email.message_from_string. You can do it, (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)
Finally content is the contents of the message, so that temporarily achieve my purpose, said here first.
http://zhiwei.li/text/2010/11/python%E9%80%9A%E8%BF%87imap%E5%8D%8F%E8%AE%AE%E6%90%9C%E7%B4%A2%E9%82%AE%E4%BB%B6/
http://code.activestate.com/recipes/52299-imap-mailwatcher-program-using-tkinter/
http://hg.python.org/cpython/file/2.7/Lib/imaplib.py
This article originates from: http://www.cnblogs.com/yhlx/archive/2013/03/22/2975817.html