Script de shell do Linux para verificar se outro usuário tem um email não lido

2

Estou procurando criar um script de shell que aceitará userids como um argumento para verificar se esse usuário tem emails não lidos em /var/spool/mail .

Como eu poderia verificar o status de e-mail de um usuário? A /var/spool/mail é apenas uma mensagem não lida? Se assim for, então estou assumindo que apenas procuraria usuários com arquivos de tamanho maior que 0.

    
por linuxnewbie 12.12.2017 / 00:26

2 respostas

0

Você pode usar o comando mailx (anteriormente mail ) com as opções -e e u :

-e Just check if mail is present in the system mailbox. If yes, return an exit status of zero, else, a non-zero value.

-u user Reads the mailbox of the given user name.

Para permitir que um usuário não raiz verifique o e-mail do outro usuário, crie uma regra sudo no arquivo /etc/sudoers , que permitirá que esse usuário execute mailx como raiz, por exemplo:

fred localhost=/bin/mailx -e -u *

verifique man sudoers para o formato completo.

Então você acabou de testar o status de saída

sudo mailx -e -u tom

executado por fred

    
por 12.12.2017 / 02:15
0

Um método usado para localizar emails não lidos é verificar os carimbos de data e hora no arquivo de spool de email. Se o arquivo foi gravado depois que foi acessado (lido), ou seja, seu mtime é maior que atime , então há um email não lido:

for f in /var/spool/mail/* ; do 
     [ $(stat -c '%Y -gt %X' "$f") ] && echo "$f has unread mail"
done

Isso, obviamente, considera tudo na caixa de correio como "lido" depois de aberto, independentemente de alguém ter olhado para as mensagens individuais.

Em muitos casos, as mensagens lidas também são removidas do diretório de spool (para ~/mbox ), portanto, você poderia apenas verificar o tamanho do arquivo.

    
por 12.12.2017 / 02:15

Tags