Moras.gr

Πως έκανα extract email addresses με Python

Πρόσφατα χρειάστηκε να κάνω εξαγωγή όλες τις διευθύνσεις από ένα mailbox οπότε σκέφτηκα πώς αν και υπάρχουν αρκετοί τρόποι να κάνεις κάτι τέτοιο αποφάσισα να γράψω ένα script σε python την οποία και διαβάζω στον ελεύθερο μου χρόνο και πραγματικά θα την συνιστούσα στον καθένα  λόγο της απλότητάς της αλλά και της δύναμης της οποίας της προσδίδουν οι άπειρες βιβλιοθήκες που υπάρχουν γι’αυτήν.

Η λογική είναι η εξής :

  1. Εισάγουμε τις απαραίτητες βιβλιοθήκες ,
    1
    2
    3
    4
    5
    6
    <pre>#!/usr/bin/python3

    from imapclient import IMAPClient
    import pyzmail , imaplib , pprint ,sys
    from validate_email import validate_email
    imaplib._MAXLINE = 10000000</pre>
  2. Ορίζουμε ποιες παραμέτρους χρειαζόμαστε ο χρήστης να δώσει κάθε φορά που τρέχει το πρόγραμμα
    1
    2
    3
    <pre>if len(sys.argv) != 4:
        print("Usage:\n    %s &lt;server&gt; &lt;username&gt; &lt;password&gt;" % (sys.argv[0][sys.argv[0].rfind("\") + 1:]))
        sys.exit()</pre>
  3. Συνδεόμαστε στον imap server
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <pre>serverName = str(sys.argv[1])
    username = str(sys.argv[2])
    password = str(sys.argv[3])


    server = IMAPClient(serverName, use_uid=True)
    server.login(username,password)
    select_info = server.select_folder('INBOX',readonly=True)
    print('%d messages in found in INBOX' % select_info[b'EXISTS'])
    print('Exporting..')</pre>
  4. Κάνουμε loop στα μηνύματα του server
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <pre>#get ids of inbox messages
    uids = server.search('ALL')


    for val in uids:
         rawMessages = server.fetch([val], ['BODY[]','FLAGS'])
         message = pyzmail.PyzMessage.factory(rawMessages[val][b'BODY[]'])
         address =  message.get_address('reply-to')
         print(address[0])
         is_valid = validate_email(address[0])
         if is_valid == True and address[0] != '':
             with open(emailFile, 'a') as out:
                out.write(address[0].lower() + '\n')</pre>
  5. Για κάθε μήνυμα βρίσκουμε την διεύθυνση που υπάρχει στο reply-to και το αποθηκεύουμε στο txt αρχείο του οποίου το όνομα όρισα να είναι emails-export.txt

To script αυτό αν και απλό συνδυάζει αρκετές βιβλιοθήκες ενώ είναι πολύ καλό για έναν αρχάριο να δει τι μπορεί να κάνει με λίγες γραμμές κώδικα .

Το τελικό script μπορείτε να το βρείτε εδώ : https://github.com/delmoras/pyextractor

Python μαθαίνω από εδώ : http://inventwithpython.com/

 

Have your say