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

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

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

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" recipient@domain.com

или же

mail -s "Copy Report" recipient@domain.com < /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 ответ1

2

Вы, вероятно , страдаете от «формата = потек» функция введена давно, см 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 recipient@domain.com

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .