2008-11-24 12 views
10

tldr: Quelqu'un peut-il me montrer comment formater correctement cet exemple Python iMAP pour que cela fonctionne?Exemple correctement formaté pour l'accès au courrier électronique Python iMAP?

de https://docs.python.org/2.4/lib/imap4-example.html

import getpass, imaplib 

M = imaplib.IMAP4() 
M.login(getpass.getuser(), getpass.getpass()) 
M.select() 
typ, data = M.search(None, 'ALL') 
for num in data[0].split(): 
    typ, data = M.fetch(num, '(RFC822)') 
    print 'Message %s\n%s\n' % (num, data[0][1]) 
M.close() 
M.logout() 

En supposant que mon email est "[email protected]" et le mot de passe est "mot de passe", comment devrait-il regarder? J'ai essayé M.login(getpass.getuser([email protected]), getpass.getpass(password)) et il a expiré. Remplissez newb ici, donc il est très probable que j'ai manqué quelque chose d'évident (comme créer un objet iMAP d'abord? Pas sûr).

+2

Sélectionnez le code, appuyez sur Ctrl + K – jfs

Répondre

2

Avez-vous oublié de spécifier l'hôte et le port IMAP? Utilisez quelque chose à l'effet de:

M = imaplib.IMAP4_SSL('imap.gmail.com') 

ou,

M = imaplib.IMAP4_SSL() 
M.open('imap.gmail.com') 
11
import imaplib 

# you want to connect to a server; specify which server 
server= imaplib.IMAP4_SSL('imap.googlemail.com') 
# after connecting, tell the server who you are 
server.login('[email protected]', 'password') 
# this will show you a list of available folders 
# possibly your Inbox is called INBOX, but check the list of mailboxes 
code, mailboxen= server.list() 
print mailboxen 
# if it's called INBOX, then… 
server.select("INBOX") 

Le reste de votre code semble correct.

+2

Juste pour sauver d'autres personnes qui pourraient voir ceci ... c'est "IMAP4_SSL" pas seulement "IMAP_SSL". – Seaux

+0

@ocdcoder: belle prise, merci. – tzot

11

Voici un script que j'avais l'habitude d'utiliser pour récupérer des informations de logwatch de ma boîte aux lettres. Presented at LFNW 2008 -

#!/usr/bin/env python 

''' Utility to scan my mailbox for new mesages from Logwatch on systems and then 
    grab useful info from the message and output a summary page. 

    by Brian C. Lane <[email protected]> 
''' 
import os, sys, imaplib, rfc822, re, StringIO 

server ='mail.brianlane.com' 
username='yourusername' 
password='yourpassword' 

M = imaplib.IMAP4_SSL(server) 
M.login(username, password) 
M.select() 
typ, data = M.search(None, '(UNSEEN SUBJECT "Logwatch")') 
for num in data[0].split(): 
    typ, data = M.fetch(num, '(RFC822)') 
# print 'Message %s\n%s\n' % (num, data[0][1]) 

    match = re.search( "^(Users logging in.*?)^\w", 
         data[0][1], 
         re.MULTILINE|re.DOTALL) 
    if match: 
     file = StringIO.StringIO(data[0][1]) 
     message = rfc822.Message(file) 
     print message['from'] 
     print match.group(1).strip() 
     print '----' 

M.close() 
M.logout() 
+4

Programmeur de caveat: l'utilisation du module Python "rfc822" est obsolète depuis Python 2.3. (Source: http://docs.python.org/2.6/library/rfc822.html) Envisagez d'utiliser le module email, à la place. –

0

Au lieu de M.login(getpass.getuser([email protected]), getpass.getpass(password)) vous devez utiliser M.login('[email protected]', 'password'), à savoir les chaînes simples (ou mieux, les variables qui les contiennent). Votre tentative ne devrait en fait pas marcher du tout, puisque getuser de getpass ne prend pas d'arguments mais retourne simplement le nom de connexion de l'utilisateur. Et [email protected] n'est même pas un nom de variable valide (vous ne l'avez pas mis entre guillemets) ...