/ usr / bin / mail не інтерпретує нові рядки


0

У мене виникає дивна проблема, коли виправляєте кота на пошту.

У мене є простий текстовий файл, який був складений із сценарію, який представляє собою звіт про те, які папки були скопійовані в сценарій. Потім я хочу надіслати цей звіт електронною поштою адміністраторам системи.

Сценарій генерує звіт просто чудово. Коли я біжу

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$

Чи використовуєте ви CRLF для розривів рядків в електронній пошті відповідно до RFC 5322 розділу 2.1 ?
Ендрю Мортон

Яку версію Linux ви запускаєте? Яку версію / usr / bin / mail ви працюєте? Це перенаправлення на щось інше, як Ubuntu, перенаправлено на hairloom-mailx?
ojs

Відповіді:


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 тощо.


Інший метод - це використання / usr / sbin / sendmail безпосередньо - це дозволить уникнути додавання заголовків mailпрограмою.
AnFi

Дякуємо за ваші пропозиції, але, на жаль, жодне рішення не працює. cat -vet показує, що він відформатований правильно та немає пробілів. Використання sendmail дає мені такий же результат.
Енді Фостер

зробив cat -vetпоказати якісь контрольні символи , як ^Mі ^[?
meuh

Я додав спробу використовувати sendmail безпосередньо.
meuh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.