поиск файла [закрыто]

uuencode является пережитком раннего 1990-х, и его следует избегать в пользу надлежащих инструментов MIME, если это вообще возможно.

К сожалению, до сих пор не существует де-факто стандартной простой утилиты командной строки Unix для отправки MIME-сообщений, хотя mutt близок к этому (но это по-прежнему в первую очередь интерактивная программа, и поэтому включает изрядное количество наворотов, если все, что вам нужно, это отправить сообщение в ваш MTA из скрипта).

В современных языках сценариев инструмент для отправки составного сообщения со встроенной текстовой частью тела с двоичным вложением состоит всего из нескольких строк кода. В пустом сценарии оболочки код немного громоздче; но реальная проблема часто состоит в том, чтобы знать достаточно о MIME, чтобы иметь возможность правильно его реализовать. Вкратце, вам необходимо понять общую структуру сообщения MIME и то, как кодировать тип части тела, который вы хотите использовать.

( printf 'From: %s\nTo: %s\nSubject: %s\n' "$sender" "$recipient" "$subject"
   printf 'Mime-Version: 1.0\nContent-type: multipart/mixed; boundary="foooobar"\n'
   printf '\n--foooobar\n\n'
   cat "$TFILE1"
   printf '\n--foooobar\nContent-type: application/octet-stream; name="%s"\n' "${output_file##*/}"
   printf 'Content-transfer-encoding: base64\n\n'
   base64 "$output_file"
   printf '\n--foooobar--\n' ) |
sendmail -t

Это должно работать для основного 7-битного текста US-ASCII; если вам нужен 8-битный текст, особенно в заголовках, есть ряд дополнительных поворотов (RFC 2047 для удобочитаемого текста, RFC 2231 для имен файлов и т. д.), после чего вы действительно захотите переключиться на язык, который инкапсулирует эти детали, поэтому вам не нужно их понимать или беспокоиться о них.

Помимо зависимости от base64 и sendmail для фактической отправки, это чистые встроенные модули и очень простые утилиты оболочки. Расширение параметра ${output_file##*/} должно работать с последними оболочками, чтобы удалить все через последнюю косую черту, хотя, если вы используете действительно старую версию, вы можете использовать базовое имя вместо этого.

0
06.04.2016, 22:26
0 ответов

Теги

Похожие вопросы