marque “novidade” / “é lido” de / var / spool / mail / $ USER como pam_mail para script customizado

2

Como posso verificar com bash ou python (preferencial) se existem alguns unread mails em /var/spool/mail/$USER como pam_mail ?

Eu gostaria de usar isso para meu próprio script personalizado, motd.dynamic

    
por Centril 19.03.2015 / 04:06

2 respostas

2

A maneira de determinar se há e-mails não lidos em um arquivo de caixa de correio é tradicionalmente verificar se o tempo de acesso é anterior à hora da modificação.

Você pode facilmente encontrar esses horários usando o comando stat ; especificando um formato de saída personalizado, esses valores podem ser importados para o shell:

eval $(stat -c 'atime=%X; mtime=%Y' /var/spool/mail/$USER)

Depois disso, você pode comparar esses valores:

if [ $atime -le $mtime ]; then echo 'You have new mail'; fi

Para torná-lo um pouco mais robusto, verifique a existência do arquivo de mensagens primeiro.

    
por 19.03.2015 / 09:15
0

Eu aceitei a ideia que @wurtel me deu e fiz isso em python:

def mail():
    # See https://tools.ietf.org/html/rfc4155
    import os
    import os.path
    import time
    mailbox = '/var/spool/mail/' + curr_user()

    def d( content, color = COLOR_NORMAL ):
        return colored( justify( content, 1 ) + '\n', color )

    def none():
        return d( 'No new mail' ) if MAIL_NONE_DISPLAY else ''

    if not os.path.isfile( mailbox ): return none()

    stat = os.stat( mailbox )
    if stat.st_mtime > stat.st_atime:
        # mailbox has been modified after accessed.
        if MAIL_NEW_COUNT:
            # check how many new mails.
            count = 0
            newlines = 2

            for l in open( mailbox ):
                if l.isspace(): newlines += 1
                else:
                    # New == We have a From header the date > atime.
                    if newlines == 2 and l.startswith( 'From ' ) and time.mktime( time.strptime( l.split( None, 2 )[2].strip() ) ):
                        count += 1
                    newlines = 0

            # open() will change access time, correct it.
            os.utime( mailbox, (time.time(), stat.st_mtime) if MAIL_CONSIDER_READ else (stat.st_atime, stat.st_mtime) )

            return d( 'You have {0} new mails'.format( count ), COLOR_WARN ) if count else none()
        else: return d( 'You have new mail', COLOR_WARN )
    else: return none()
    
por 24.03.2015 / 07:33

Tags