• Как взаимодействовать с gmail?

    @klamer
    #!/usr/bin/env python
    
    import sys
    import imaplib
    import getpass
    import email
    import datetime
    import socket
    import os
    import sys
    
    def process_mailbox(M):
            betweenDates = '(SINCE 01-Mar-2014 BEFORE 30-Apr-2014)'
            M.select('INBOX')
            rv, data = M.search(None, "ALL", betweenDates)
    #       rv, data = M.search(None, "UNSEEN",betweenDates)
            if rv != 'OK':
                    print "No messages found!"
                    return
    
            for num in data[0].split():
                    rv, data = M.fetch(num, '(RFC822)')
                    if rv != 'OK':
                            print "ERROR getting message", num
                            return
    
                    emailBody = data[0][1]
                    mail = email.message_from_string(emailBody)
    
                    #print 'Raw Date:', mail['Date'],
                    date_tuple = email.utils.parsedate_tz(mail['Date'])
                    if date_tuple:
                            local_date = datetime.datetime.fromtimestamp( email.utils.mktime_tz(date_tuple))
                            #print "Local Date:", local_date.strftime("%a, %d %b %Y %H:%M:%S")
    
                    for part in mail.walk():
                             if part.get_content_maintype() == 'multipart':
                                     # print part.as_string()
                                    continue
                             if part.get('Content-Disposition') is None:
                                     # print part.as_string()
                                     continue
                             fileName = part.get_filename()
                             #print fileName
    
                             if bool(fileName):
                                     filePath = os.path.join(detach_dir, 'attachments', fileName)
                                     if not os.path.isfile(filePath) :
                                     #if 1==1:
                                             print fileName,
                                             print " ", local_date.strftime(" %d %b %Y ")
                                             fp = open(filePath, 'wb')
                                             if fp != None:
                                                    fp.write(part.get_payload(decode=True))
                                             fp.close()
    
    detach_dir = '.'
    if 'attachments' not in os.listdir(detach_dir):
            os.mkdir('attachments')
    
    M = imaplib.IMAP4_SSL('imap.gmail.com')
    try:
            M.login('set_your_mail_addres_here@gmail.com', getpass.getpass())
            rv, mailboxes = M.list()
            if rv == 'OK':
                    print M.list()
                    print "Processing mailbox...\n"
                    process_mailbox(M) # ... do something with emails, see below ...
                    M.close()
            M.logout()
    
    #except imaplib.IMAP4.error:
    except socket.error, e:
            print e
            print "LOGIN FAILED!!! "
            # ... exit
            M.close()
            M.logout()
            #or deal with failure...

    Скрипт пишет все аттачменты в ./attachments
    Работает не только с gmail.com, правда gmail уже требует oauth2. Для того что бы скрипт не завалил логин нужно отключить oauth в gmail.com.
    Ответ написан
    Комментировать
  • Как организовать продажу ПО?

    @klamer
    3.2 Есть ли какие-то правовые формы в Европе, чтобы мы могли зарегистрировать ПО там, и там же открыть какое-то аналог ОАО, который было бы легко ликвидировать если продукт рынком принят не будет?

    Получить патент за ПО в ЕС очень сложно, даже зарегистрировать полезную модель на ПО не легкое дело.

    АО регистрировать дешевле всего в прибалтике или в Болгарии и Румынии. Можно продавать и как физ. лицо, но не все клиенты согласны иметь дело с физ. лицом (в основном из за НДС , и из за порядка оплаты счетов - физ. лицу сложнее с invoices and etc.).
    Ответ написан
    Комментировать
  • Можно ли установить два Python 2.7 и 3.4 на одной машине?

    @klamer
    Можно.

    $ which python2
    /usr/bin/python2
    $ which python3
    /usr/bin/python3
    $ python2 --version
    Python 2.7.3
    $ python3 --version
    Python 3.2.3

    Пучше конечно указать в самом скрипте:
    #!/usr/bin/env python3
    или
    #!/usr/bin/env python2
    Ответ написан
    Комментировать
  • Стоит ли избавляться от гетерогенности linux в сети?

    @klamer
    IMHO если не "приспичило" то не стоит спешить. А там через два три года и вовсе престанете замечать разницу :)
    Ответ написан
    Комментировать
  • Как прочитать файл csv скриптом Python?

    @klamer
    Писал вот такое:

    def read_attributes(filename):
    
        with open(filename, 'r') as f:
            header = f.readline().strip()
    
        attributes = [attr.strip() for attr in header.split(",")]
    
        return attributes
    
    def read_data(filename, attributes):
    
        with open(filename) as f:
            lines = [line.strip() for line in f.readlines()]
    
        del lines[0] # header :)
    
        data = []
        for line in lines:
            data.append(dict(zip(attributes, [datum.strip() for datum in line.split(",")])))
    
        return data
    Ответ написан
    Комментировать
  • Debian - как просмотреть список запущенных процессов и сколько они занимают оперативной памяти?

    @klamer
    ps ax -o size,cmd | sort -n -r | less
    Ответ написан
    Комментировать