Eu tenho um problema estranho ao enviar um gato para o correio.
Eu tenho um arquivo de texto simples que foi compilado a partir de um script, que é um relatório sobre quais pastas foram copiadas no script. Desejo então enviar este relatório por e-mail aos administradores do sistema.
O script gera o relatório perfeitamente. Quando eu corro
cat /tmp/report.txt
Obtenho uma saída bem formatada com todas as quebras de linha que esperaria.
Copy report. Started on Mon Sep 28 13:37:57 BST 2015
Run in progress?: Yes
3 directories were copied.
Copy started on 2015.09.28 at 13:37:57
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10)
Copy completed on 2015.09.28 at 13:37:57
Copy info:
0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
0inputs+355896outputs (0major+150minor)pagefaults 0swaps
Copy started on 2015.09.28 at 13:37:59
Copying /mnt/smb/New folder (14) to /mnt/backup/New folder (14)
Copy completed on 2015.09.28 at 13:37:59
Copy info:
0.00user 0.41system 0:01.78elapsed 23%CPU (0avgtext+0avgdata 2620maxresident)k
0inputs+355896outputs (0major+152minor)pagefaults 0swaps
Copy started on 2015.09.28 at 13:38:01
Copying /mnt/smb/New folder (18) to /mnt/backup/New folder (18)
Copy completed on 2015.09.28 at 13:38:01
Copy info:
0.00user 0.28system 0:01.71elapsed 16%CPU (0avgtext+0avgdata 2768maxresident)k
0inputs+355896outputs (0major+151minor)pagefaults 0swaps
No entanto, por alguma razão, quando agora envio isso para o correio
cat /tmp/report.txt | mail -s "Copy Report" [email protected]
ou
mail -s "Copy Report" [email protected] < /tmp/report.txt
Este é o e-mail que recebo.
Copy report. Started on Mon Sep 28 13:37:57 BST 2015
Run in progress?: Yes
3 directories were copied.
Copy started on 2015.09.28 at 13:37:57
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10) Copy completed on 2015.09.28 at 13:37:57 Copy info:
0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
0inputs+355896outputs (0major+150minor)pagefaults 0swaps
Copy started on 2015.09.28 at 13:37:59
Copying /mnt/smb/New folder (14) to /mnt/backup/New folder (14) Copy completed on 2015.09.28 at 13:37:59 Copy info:
0.00user 0.41system 0:01.78elapsed 23%CPU (0avgtext+0avgdata 2620maxresident)k
0inputs+355896outputs (0major+152minor)pagefaults 0swaps
Copy started on 2015.09.28 at 13:38:01
Copying /mnt/smb/New folder (18) to /mnt/backup/New folder (18) Copy completed on 2015.09.28 at 13:38:01 Copy info:
0.00user 0.28system 0:01.71elapsed 16%CPU (0avgtext+0avgdata 2768maxresident)k
0inputs+355896outputs (0major+151minor)pagefaults 0swaps
O que da? Algumas quebras de linha existem, outras não! Tentei editar o arquivo no vi e no nano e garanti que as quebras de linha estavam realmente lá. Também os excluí e os criei novamente e a saída do e-mail permanece a mesma.
Usando /usr/bin/mail
Mais informações:
Digitei manualmente o seguinte em um arquivo de texto e fiz o mesmo canal para enviar. Coloquei a palavra “Copiar” no início de cada linha.
Copy started on 2015.09.28 at 13:37:57
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10)
Copy completed on 2015.09.28 at 13:37:57
Copy info:
Copy 0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
Copy 0inputs+355896outputs (0major+150minor)pagefaults 0swaps
Isto é o que recebi no e-mail:
Copy started on 2015.09.28 at 13:37:57
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10) Copy completed on 2015.09.28 at 13:37:57 Copy info:
0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
0inputs+355896outputs (0major+150minor)pagefaults 0swaps
Em seguida, removi todas as palavras "Copiar". Isto é o que recebi no e-mail.
Started on 2015.09.29 at 09:46:49
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10) Completed on 2015.09.29 at 09:46:49
Info:
0.00user 0.46system 0:01.98elapsed 23%CPU (0avgtext+0avgdata 2552maxresident)k
0inputs+355896outputs (0major+149minor)pagefaults 0swaps
Achei que poderia ter algo a ver com a palavra Copiar, mas ainda tenho uma linha sem quebra de linha!
Esta é a saída decat -vet /tmp/report.txt
Copy report. Started on Mon Sep 28 13:37:57 BST 2015$
$
Run in progress?: Yes$
$
$
$
3 directories were copied.$
$
$
Copy started on 2015.09.28 at 13:37:57$
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10)$
Copy completed on 2015.09.28 at 13:37:57$
Copy info:$
0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k$
0inputs+355896outputs (0major+150minor)pagefaults 0swaps$
$
$
Copy started on 2015.09.28 at 13:37:59$
Copying /mnt/smb/New folder (14) to /mnt/backup/New folder (14)$
Copy completed on 2015.09.28 at 13:37:59$
Copy info:$
0.00user 0.41system 0:01.78elapsed 23%CPU (0avgtext+0avgdata 2620maxresident)k$
0inputs+355896outputs (0major+152minor)pagefaults 0swaps$
$
$
Copy started on 2015.09.28 at 13:38:01$
Copying /mnt/smb/New folder (18) to /mnt/backup/New folder (18)$
Copy completed on 2015.09.28 at 13:38:01$
Copy info:$
0.00user 0.28system 0:01.71elapsed 16%CPU (0avgtext+0avgdata 2768maxresident)k$
0inputs+355896outputs (0major+151minor)pagefaults 0swaps$
Responder1
Você provavelmente está sofrendo do problema "format=flowed"recursointroduzido há muito tempo, vejarfc2646.
Você provavelmente descobrirá que algumas linhas possuem um caractere de espaço à direita. Isso é interpretado por alguns leitores de e-mail como significando "concatenar esta linha com a próxima e, em seguida, refazer o contorno do texto para que as linhas caibam na largura da tela".
Normalmente, isso só deve ser feito se o seu e-mail tiver a Content-Type
opção header format=flowed
, mas hoje em dia, devido à multidão não-Unix, isso se tornou um padrão.
Use cat -vet
em seus dados para ver se há espaços à direita. Use sed 's/ \+$//'
para removê-los.
Não vi nenhum espaço à direita, nem caracteres de controle, nem retornos de carro em seus dados, portanto, não há desculpa real para sua mala direta adulterá-los.
Uma última tentativa: como sugeriu Andrzej A. Filip, em vez de mail
ir direto para sendmail
. Isso permitirá que você adicione um cabeçalho de tipo de conteúdo explícito. Por exemplo:
(echo 'Subject: Copy Report'
echo 'Content-Type: text/plain; charset=us-ascii; format=fixed'
echo
cat /tmp/report.txt
) | sendmail [email protected]
A última echo
é encerrar os cabeçalhos antes dos dados. sendmail pode não estar no seu PATH, procure em /sbin e /usr/sbin e assim por diante.