У меня возникла странная проблема при отправке кошки на почту.
У меня есть простой текстовый файл, который был скомпилирован из скрипта, который является отчетом о том, какие папки были скопированы в скрипте. Затем я хочу отправить этот отчет по электронной почте системным администраторам.
Скрипт отлично генерирует отчет. Когда я запускаю
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 и т. д.