/usr/bin/mail не интерпретирует новые строки

/usr/bin/mail не интерпретирует новые строки

У меня возникла странная проблема при отправке кошки на почту.

У меня есть простой текстовый файл, который был скомпилирован из скрипта, который является отчетом о том, какие папки были скопированы в скрипте. Затем я хочу отправить этот отчет по электронной почте системным администраторам.

Скрипт отлично генерирует отчет. Когда я запускаю

cat /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

Однако по какой-то причине, когда я сейчас отправляю это по почте

cat /tmp/report.txt | mail -s "Copy Report" [email protected]

или

mail -s "Copy Report" [email protected] < /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

Что происходит? Некоторые переносы строк есть, некоторые нет! Я пробовал редактировать файл и в vi, и в nano и убедился, что переносы строк действительно есть. Также удалил их и сделал снова, а вывод электронной почты остался прежним.

Использование /usr/bin/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:
Copy 0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
Copy 0inputs+355896outputs (0major+150minor)pagefaults 0swaps

Вот что я получил по электронной почте:

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

Затем я удалил все слова «Копировать». Вот что я получил в письме.

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

Я думал, что это как-то связано со словом «Копировать», но у меня все равно осталась одна строка без переноса!

Это результатcat -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$

решение1

Вероятно, вы страдаете от "format=flowed"особенностьвведено давно, см.rfc2646.

Вероятно, вы обнаружите, что некоторые строки имеют завершающий пробел. Некоторые почтовые читатели интерпретируют это как "объединить эту строку со следующей, а затем переделать перенос текста для строк, чтобы они вписывались в ширину экрана".

Обычно это следует делать только в том случае, если в вашем письме есть Content-Typeопция заголовка format=flowed, но в настоящее время из-за большого количества не-Unix-пользователей это стало опцией по умолчанию.

Используйте cat -vetдля проверки данных на наличие конечных пробелов. Используйте sed 's/ \+$//'для их удаления.


Я не увидел в ваших данных никаких конечных пробелов, управляющих символов или символов возврата каретки, так что нет никаких реальных оправданий для того, чтобы ваша почтовая программа что-то с ними изменила.

Последняя попытка: как предложил Анджей А. Филип, вместо того, чтобы mailсразу перейти к sendmail. Это позволит вам добавить явный заголовок типа контента. Например:

(echo 'Subject: Copy Report'
 echo 'Content-Type: text/plain; charset=us-ascii; format=fixed'
 echo
 cat /tmp/report.txt
) |  sendmail [email protected]

Последнее echo— это завершение заголовков перед данными. sendmail может отсутствовать в вашем PATH, посмотрите в /sbin и /usr/sbin и т. д.

Связанный контент