Код KornShell (ksh) для отправки вложений с помощью mailx и uuencode?

StackOverflow https://stackoverflow.com/questions/96326

Вопрос

Мне нужно прикрепить файл с помощью mailx, но на данный момент у меня ничего не получается.

Вот мой код:

subject="Something happened"
to="somebody@somewhere.com"
body="Attachment Test"
attachment=/path/to/somefile.csv

uuencode $attachment | mailx -s "$subject" "$to" << EOF

The message is ready to be sent with the following file or link attachments:

somefile.csv

Note: To protect against computer viruses, e-mail programs may prevent
sending or receiving certain types of file attachments.  Check your
e-mail security settings to determine how attachments are handled.

EOF

Мы будем высоко признательны за любые отзывы.


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

Это было полезно?

Решение

Вы должны объединить как текст вашего сообщения, так и uuencoded вложение:

$ subject="Something happened"
$ to="somebody@somewhere.com"
$ body="Attachment Test"
$ attachment=/path/to/somefile.csv
$
$ cat >msg.txt <<EOF
> The message is ready to be sent with the following file or link attachments:
>
> somefile.csv
>
> Note: To protect against computer viruses, e-mail programs may prevent
> sending or receiving certain types of file attachments.  Check your
> e-mail security settings to determine how attachments are handled.
>
> EOF
$ ( cat msg.txt ; uuencode $attachment somefile.csv) | mailx -s "$subject" "$to"

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

Другие советы

Что ж, вот первые несколько проблем, с которыми вы столкнулись.

  1. Похоже, вы предполагаете, что почтовый клиент будет обрабатывать uuencoded вложение без каких-либо заголовков.Этого не произойдет.

  2. Вы неправильно используете перенаправление ввода-вывода:выходные данные uuencode и here-document передаются в mailx, чего не может быть.

  3. Вы неправильно используете uuencode:если указан один путь, то это просто имя для присвоения декодированному файлу, а не имя входного файла.При повторном вводе файла декодированному файлу будет присвоено то же имя, что и тому, который был прочитан.Флаг -m принудительно кодирует base64.Но это по-прежнему не будет предоставлять заголовки вложений для mailx.

Вам намного лучше получить копию mpack, которая будет делать то, что вы хотите.

Если вы должны это сделать, вы могли бы сделать что-то вроде этого:

cat <<EOF | ( cat -; uuencode -m /path/to/somefile.csv /path/to/somefile.csv; ) | mailx -s "$subject" "$to" 
place your message from the here block in your example here
EOF

Есть много других возможностей...но у этого все еще есть документ here как в вашем примере, и это было просто с моей точки зрения, и в нем нет временного файла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top